Как построить серию с выборочными галочками? - PullRequest
0 голосов
/ 02 марта 2019

У меня есть Series, который я хотел бы построить в виде гистограммы: pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts() Поскольку у меня много баров, я хочу отображать только некоторые (равноудаленные) тики.Однако, если я не буду активно работать против этого, pyplot напечатает неправильные метки.Например, если я пропущу set_xticklabels в приведенном ниже коде, я получу wrong labels
, где каждый элемент из индекса берется и просто отображается с указанным расстоянием.

Этот кодделает то, что я хочу:

import numpy as np 
import pandas as pd 
import matplotlib 
import matplotlib.pyplot as plt 
s = pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts().sort_index()  
mi,ma = min(s.index), max(s.index)  
s = s.reindex(range(mi,ma+1,1), fill_value=0)  
distance = 10 
a = s.plot(kind='bar') 
condition = lambda t: int(t[1].get_text()) % 10 == 0 
ticks_,labels_=zip(*filter(condition, zip(a.get_xticks(), a.get_xticklabels())))  
a.set_xticks(ticks_)   
a.set_xticklabels(labels_) 
plt.show() 

correct labels

Но я все еще чувствую, что я здесь излишне умен.Я пропускаю функцию?Это лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Не используйте график панд, если вы собираетесь строить числовые значения;это потому, что сюжеты бара панд носят категоричный характер.

Если вместо этого использовать гистограмму matplotlib, которая является числовой по своему характеру, то нет необходимости вообще возиться с какими-либо тиками.

s = pd.Series([-4,2, 3,3, 4,5,9,20]).value_counts().sort_index()
plt.bar(s.index, s)

enter image description here

0 голосов
/ 02 марта 2019

Я думаю, вы слишком усложнили это.Вы можете просто использовать следующее.Вам просто нужно найти связь между клещами и метками.

a = s.plot(kind='bar') 

xticks = np.arange(0, max(s)*10+1, 10) 
plt.xticks(xticks + abs(mi), xticks)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...