我正在尝试绘制一个条形图,其中每个bin有不同的长度,因此我最终得到了一个非常难看的结果。:)我想要做的仍然是能够定义一个尊重的bin长度,但所有条形图绘制相同的固定宽度。我怎样才能做到这一点?以下是我到目前为止所做的事情:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_palette("deep", desat=.6)
sns.set_context(rc={"figure.figsize": (8, 4)})
np.random.seed(9221999)
data = [0,2,30,40,50,10,50,40,150,70,150,10,3,70,70,90,10,2]
bins = [0,1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200]
plt.hist(data, bins=bins);
修改
这个问题已经被标记为重复,但实际上没有提出的链接解决了我的问题;第一个是一个非常糟糕的解决方法,第二个并没有解决问题,因为它设置了所有的条形码。宽度到一定数量。
答案 0 :(得分:3)
您是否想要在每个垃圾箱的中心放置一个固定宽度的栏?
如果是这样,尝试类似于此的东西:
import numpy as np
import matplotlib.pyplot as plt
data = [0,2,30,40,50,10,50,40,150,70,150,10,3,70,70,90,10,2]
bins = [0,1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200]
counts, _ = np.histogram(data, bins)
centers = np.mean([bins[:-1], bins[1:]], axis=0)
plt.bar(centers, counts, width=5, align='center')
plt.show()
答案 1 :(得分:3)
您可以随身携带seaborn
。但您必须了解seaborn
本身使用 matplotlib
创建图表。
AND:请删除您的other question,现在它确实是重复的。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_palette("deep", desat=.6)
sns.set_context(rc={"figure.figsize": (8, 4)})
data = [0,2,30,40,50,10,50,40,150,70,150,10,3,70,70,90,10,2]
bins = [0,1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200]
bin_middles = bins[:-1] + np.diff(bins)/2.
bar_width = 1.
m, bins = np.histogram(data, bins)
plt.bar(np.arange(len(m)) + (1-bar_width)/2., m, width=bar_width)
ax = plt.gca()
ax.set_xticks(np.arange(len(bins)))
ax.set_xticklabels(['{:.0f}'.format(i) for i in bins])
plt.show()
我个人认为,绘制这样的数据令人困惑。非线性(或非对数)轴缩放通常不是一个好主意。