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?

0
SheerKahn 23 marzec 2020, 12:38

2 odpowiedzi

Najlepsza odpowiedź

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])
0
JohanC 23 marzec 2020, 13:41

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'])
0
Someone 23 marzec 2020, 19:58