Mam działkę, jak pokazano poniżej, która ma ponad 1000 punktów na osi X. Próbuję przeskalować oś X do 3 wartości, wartości minimalnej, średniej i maksymalnej zamiast 1000 etykiet.
Pomimo moich wysiłków oznaczonych w hashtagach, wszystkie 3 wartości są zapisywane na tym samym tiku (jeden na drugim) lub po prostu tylko 1 tik jest losowo umieszczany na osi x.
import matplotlib.pyplot as plt
from matlplotlib.pyplot import figure
figure (num = None, figsize=(20,10), dpi=80, facecolor='w', edgecolor='k')
ax =plt.gca()
data.plot(kind='bar', x='colA', y='colB', ax=ax)
######
plt.xticks(np.arrange(0,3, step 1)
**ALSO TRIED**
plt.xticks = ([1,2,3], ["a","b","c"])
######
plt.show()
Jak mogę równomiernie rozłożyć wartości min, mid i max na osi X?
2 odpowiedzi
Jeśli „colA” ma wartość liczbową:
x_min = min(data['colA'])
x_max = max(data['colA'])
x_mid = (x_min + x_max) / 2
# use regular division if the numbers are floats, use integer division in case all numbers are integers
plt.xticks([x_min, x_mid, x_max], ["a","b","c"])
# plt.xticks([x_min, x_mid, x_max]) # leave out the labels if the default labels are OK
Jeśli, przeciwnie, „colA” jest kategoryczne (a więc niektóre łańcuchy), są one numerowane wewnętrznie jako 0, 1, 2, ...
aż do liczby ciągów minus jeden:
x_min = 0
x_max = len(data['colA']) - 1
x_mid = x_max // 2 # integer division
plt.xticks([x_min, x_mid, x_max])
Możesz spróbować:
min_ = min(data['colA'])
max_ = max(data['colA'])
mid_ = (min_ + max_) / 2.
ax.set_xticks([min_, mid_, max_])
ax.set_xticklabels(['min', 'mid', 'max'])
Podobne pytania
Nowe pytania
python-3.x
W przypadku pytań dotyczących programowania w języku Python, które są specyficzne dla wersji 3+ tego języka. Użyj bardziej ogólnego tagu [python] we wszystkich pytaniach Pythona i dodaj ten tylko, jeśli twoje pytanie dotyczy wersji. Użyj znaczników [python-2.x] w pytaniach o Python 2.