【问题标题】:what is the name of this graph and how to plot it?该图的名称是什么以及如何绘制它?
【发布时间】:2020-02-02 14:20:17
【问题描述】:

假设我有这两个列表。

p=[0,0,0,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,5,5,5,5]
q=[1,1,1,1,3,3,3,3,3,4,4,4,4,2,2,1,1,1,1,1,2,2,2,2,5,5,5,5,0,0,0,0]

我想像这张图片一样绘制它,颜色代表列表中的数字,如绿色为 0 或黄色为 1。以上列表不是下图中图表的真实数据。图片只是我要创建的图表的示例。

【问题讨论】:

  • 这是一个水平堆积条形图。

标签: python pandas


【解决方案1】:

可以使用pandas 作为水平堆积条形图来创建给定的图表。不过,您需要在此之前将数据集转换为数据框。

from itertools import groupby
data=[(key,len(list(group))) for key, group in groupby(p)]
print(data)

list1, list2 = zip(*data)

df2=pd.DataFrame([list2],columns=list1)
df2.plot(kind='bar', stacked=True)

Source

您可以使用 matplotlib 绘制相同的图形,以自定义方向、xticks、yticks、标签方法、宽度等,使其看起来符合您的要求。

【讨论】:

  • 我试过你的代码,但它与我想要的略有不同。我需要相同颜色的数字,例如列表 p 中的 3 之间是否有 4,第二个 3 仍然使用与第一个 3 相同的颜色。如果您在图片中注意到,第一个图中出现了三倍的绿色。
  • 您需要更改数据框查找此类内容的方式并根据此关联颜色。此代码绘制数组中的整体频率,而不是连续频率。
  • 你能告诉我应该如何更改我的数据框吗?
  • 我明白了。我的朋友将这些添加到您的代码中并得到了图表。感谢您的帮助。 color=["r", "g", "b", "k", "c", "m", "y"] colorlist = [color[i] for i in list1]
猜你喜欢
  • 2019-09-28
  • 1970-01-01
  • 2016-11-11
  • 2018-09-17
  • 1970-01-01
  • 2010-12-04
  • 2014-03-29
  • 2020-08-06
  • 1970-01-01
相关资源
最近更新 更多