Я строю графики на основе данных, которые находятся в pandas фрейме данных ('df'), и использую категоричный график seaborn, или catplot, для создания моей фигуры.
Все, что я хочу сделать с моей фигурой изменить yaxis так, чтобы он шел от 0 до 8 вместо диапазона ylim по умолчанию (от 5 до 8). Я попытался сделать это несколькими способами, которые вы увидите ниже в моем коде. Все это работает ... за исключением того, что числа рядом с галочками яксиса неверны; они не обновляются с числами, которым они дали диапазон ylim по умолчанию.
У меня есть дрянной обходной путь (также в коде ниже), который заставляет меня хотеть фигуру, но почему это необходимо? Есть еще больше вопросов, поднятых в обходном обходе: ax.set_yticks не работает, в то время как ax.set_yticklabels работает. В целом, похоже, что-то не связывается с matplotlib или seaborn ... Я не знаю, где я ошибся.
import pandas as pd
import numpy as np
from numpy import median
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="ticks", color_codes=True)
##skipping to the part where i plot stuff
colors = ["windows blue","windows blue","windows blue","windows blue","windows blue",
"amber","amber","amber","amber","amber","dusty purple","dusty purple"]
fig = sns.catplot(x="x",y="y",data=yummy, height=5, aspect=1.4,
palette=sns.xkcd_palette(colors),
)
fig.set_xticklabels(rotation=45, fontsize=10, va="top", ha="right")
fig.set_yticklabels(fontsize=10)
"""
CHANGING YLIM
- want min to be 0
- max can be whatever, but let's do 8
- i tried all the below; all have same result
"""
#axes = fig.axes
#axes[0,0].set_ylim(0,8)
#sns.fig.ylim(0,8)
#fig.set(ylim=(0,8))
#plt.ylim(0,8)
#plt.ylim(ymin=0,ymax=8)
#plt.ylim(bottom=0,top=8,auto=True)
#sns.set_ylim(bottom=0,top=8)
"""
JANKY WORKAROUND BELOW
"""
#ax = fig.gca() #this does NOT work because catplot is a kind of FacetGrid
ax = plt.gca() #gca = get current axis
ax.set_ylim(0,8)
#ax.set_yticks([0,1,2,3,4,5,6,7,8]) #this does NOT work
ax.set_yticklabels([0,1,2,3,4,5,6,7,8]) #this does, for whatever reason
"""
ADDING NAMES OF XAXIS AND YAXIS LABELS
"""
plt.xlabel('xaxis label', fontsize=13)
plt.ylabel('yaxis label', fontsize=13)
"""
ADDING ERROR BARS TO CATPLOT
"""
plt.errorbar(range(len(df["Mean"])),
df["Mean"],
yerr=df["Standard Deviation"],
ls="none",
capsize=8,
ecolor='black',
marker='_', #adds marker for mean and makes it a horizontal line
#mfc ='black', #markerfacecolor; i have no faces
mec = 'black', #markeredgecolor; the caps and marker are edges
mew = 2, #markeredgewidth
ms=20 #markersize
)
plt.show()