#pandas #matplotlib #seaborn
#pandas #matplotlib #seaborn
Вопрос:
У меня есть эти данные:
import matplotlib.pyplot as plt
from matplotlib.patches import Patch
import seaborn as sns
import pandas as pd
df = pd.DataFrame({'C': np.random.choice([False, False, False, True], 100000),
'D': np.random.choice([False,True], 100000),
'B': np.random.choice([False,True, True], 100000),
'A': np.random.choice([False, False, True], 100000),
'F': np.random.choice([False,True, True, True], 100000)})
Где я рисую это:
fig, ax = plt.subplots(figsize=(5, 6))
cmap = sns.mpl_palette("Set2", 2)
sns.heatmap(data=df, cmap=cmap, cbar=False)
plt.xticks(rotation=90, fontsize=10)
plt.yticks(rotation=0, fontsize=10)
legend_handles = [Patch(color=cmap[True], label='Missing Value'), # red
Patch(color=cmap[False], label='Non Missing Value')] # blue-green
plt.legend(handles=legend_handles, ncol=2, bbox_to_anchor=[0.5, 1.02], loc='lower center', fontsize=8, handlelength=.8)
plt.tight_layout()
plt.show()
Я пытался упорядочить ось x от более высокого к более низкому (слева направо) с учетом количества True
значений. Итак, первая позиция должна иметь наибольшее количество True
значений, вторая позиция — вторая по величине и так далее.
Я смог получить позиции и их соответствующие метки с помощью:
x_axis = df.sum().rank(method="dense", ascending=False)
x_pos = x_axis.values.tolist()
x_labels = x_axis.index.tolist()
Но я изо всех сил пытаюсь включить это в график и заставить его работать, а также потому, что мне нужно быть уверенным, что я не просто изменяю положение меток, но и положение переменных, отображаемых на графике (поскольку я визуализирую около 100 переменных в реальном фрейме данных)