Изменение лимита yaxis, число yticks не обновляется. Данные построены правильно, но номера тиков яксис неверны - PullRequest
0 голосов
/ 18 апреля 2020

Я строю графики на основе данных, которые находятся в 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()
...