Я пытаюсь построить блокпост для двух разных наборов данных на одном графике. Ось X - это часы дня, а ось Y - от 0 до 1 (назовем это эффективностью). Я хотел бы иметь разные маркеры для средств каждого блока набора данных. Я использую «meanprops» для морских перевозок, но это меняет стиль маркера для обоих наборов данных одновременно. Я добавил 2000 строк данных в Excel, которые можно загрузить здесь . Значения могут не совпадать с указанными на картинке, но их должно быть достаточно.
По сути, я хочу, чтобы красные квадраты были голубыми на оранжевом поле и красным на синем. Вот что мне удалось сделать до сих пор:
Я попытался изменить средние предложения, используя словарь с метками в качестве ключей, но, похоже, вводить все oop (в PyCharm это говорит Оценка ...)
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
#make sure you have your path sorted out
group1 = pd.read_excel('group1.xls')
ax,fig = plt.subplots(figsize = (20,10))
#does not work
#ax = sns.boxplot(data=group1, x='hour', y='M1_eff', hue='labels',showfliers=False, showmeans=True,\
# meanprops={"marker":{'7':"s",'8':'s'},"markerfacecolor":{'7':"white",'8':'white'},
#"markeredgecolor":{'7':"blue",'8':'red'})
#works but produces similar markers
ax = sns.boxplot(data=group1, x='hour', y='M1_eff', hue='labels',showfliers=False, showmeans=True,\
meanprops={"marker":"s","markerfacecolor":"white", "markeredgecolor":"blue"})
plt.legend(title='Groups', loc=2, bbox_to_anchor=(1, 1),borderaxespad=0.5)
# Add transparency to colors
for patch in ax.artists:
r, g, b, a = patch.get_facecolor()
patch.set_facecolor((r, g, b, .4))
ax.set_xlabel("Hours",fontsize=14)
ax.set_ylabel("M1 Efficiency",fontsize=14)
ax.tick_params(labelsize=10)
plt.show()
Я также попробовал FacetGrid , но безрезультатно (Останавливается на "Оценка ...") :
g = sns.FacetGrid(group1, col="M1_eff", hue="labels",hue_kws=dict(marker=["^", "v"]))
g = (g.map(plt.boxplot, "hour", "M1_eff")
.add_legend())
g.show()
Любая помощь приветствуется!