seaborn或matplotlib条并排打印多个数据帧

seaborn或matplotlib条并排打印多个数据帧,matplotlib,plot,jupyter-notebook,seaborn,Matplotlib,Plot,Jupyter Notebook,Seaborn,使用matplotlib,我试图将条形图彼此相邻。这是很常见的,我已经浏览了很多stackoverflow页面,但有些地方仍然不正确 df1 df2 df3 代码: 下面是它的外观: 但我尝试过align=edge,align=center,并尝试过宽度,但总是重叠 我如何使这项工作,使酒吧不堆叠,使他们并排 像这样: ****更新了答案****** Y.Luo这对我来说在熊猫中效果最好: dateindex=df1['date'] aa=dict(zip(x,df1['count'])

使用matplotlib,我试图将条形图彼此相邻。这是很常见的,我已经浏览了很多stackoverflow页面,但有些地方仍然不正确

df1

df2

df3

代码:

下面是它的外观: 但我尝试过
align=edge
align=center
,并尝试过宽度,但总是重叠

我如何使这项工作,使酒吧不堆叠,使他们并排

像这样:


****更新了答案******
Y.Luo这对我来说在熊猫中效果最好:

dateindex=df1['date']

aa=dict(zip(x,df1['count']))
bb=dict(zip(x,df2['count']))
cc=dict(zip(x,df3['count']))
dd=dict(zip(x,df4['count']))
ee=dict(zip(x,df5['count']))


dfbar = pd.DataFrame({'AA': aa, 'BB': bb, 'CC': cc,'DD': dd, 'EE': ee}, index=dateindex)

# Non-stacked bar plot
dfbar.plot.bar(figsize=(16, 6))

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show() 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Example data
n=24
dateindex = pd.date_range(pd.datetime(2018, 1, 1), periods=n)
np.random.seed(1)
aa = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)
np.random.seed(2)
bb = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)
np.random.seed(3)
cc = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)

# Non-stacked bar plot
plt.figure(figsize=(16, 6))
width = 0.25
plt.bar(np.arange(len(aa))-width, aa.values, width, label="AA")
plt.bar(np.arange(len(aa)), bb.values, width, label="BB")
plt.bar(np.arange(len(aa))+width, cc.values, width, label="CC")
plt.xticks(np.arange(len(aa)), dateindex, rotation='vertical')

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show()

如果希望使用matplotlib绘制非堆叠条形图,则需要自己调整每个数据帧的位置,如下所示:

dateindex=df1['date']

aa=dict(zip(x,df1['count']))
bb=dict(zip(x,df2['count']))
cc=dict(zip(x,df3['count']))
dd=dict(zip(x,df4['count']))
ee=dict(zip(x,df5['count']))


dfbar = pd.DataFrame({'AA': aa, 'BB': bb, 'CC': cc,'DD': dd, 'EE': ee}, index=dateindex)

# Non-stacked bar plot
dfbar.plot.bar(figsize=(16, 6))

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show() 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Example data
n=24
dateindex = pd.date_range(pd.datetime(2018, 1, 1), periods=n)
np.random.seed(1)
aa = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)
np.random.seed(2)
bb = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)
np.random.seed(3)
cc = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)

# Non-stacked bar plot
plt.figure(figsize=(16, 6))
width = 0.25
plt.bar(np.arange(len(aa))-width, aa.values, width, label="AA")
plt.bar(np.arange(len(aa)), bb.values, width, label="BB")
plt.bar(np.arange(len(aa))+width, cc.values, width, label="CC")
plt.xticks(np.arange(len(aa)), dateindex, rotation='vertical')

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show()

Beingernest的重要性是正确的。熊猫是最简单的,因为它可以为您进行调整:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Example data
n=24
dateindex = pd.date_range(pd.datetime(2018, 1, 1), periods=n)
np.random.seed(1)
aa = np.random.randn(n)
np.random.seed(2)
bb = np.random.randn(n)
np.random.seed(3)
cc = np.random.randn(n)
df = pd.DataFrame({'AA': aa, 'BB': bb, 'CC': cc}, index=dateindex)

# Non-stacked bar plot
df.plot.bar(figsize=(16, 6))

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show()

您可以将数据合并到单个数据帧中,每个原始数据帧一列,并使用熊猫图进行打印。您还可以附加所有数据帧以创建一个长格式表,其中另一列指定类别,并使用seaborn的色调参数。我认为这两种方法都有足够的问题。如果你在实现它们时遇到问题,可以问一个关于这个问题的具体问题。这就是问题所在有太多的方法@ImportanceOfBeingErnest。你建议哪种方法,在这方面还是有点新的。我想要matplotlib中的^的一个例子,因为我使用的大多数熊猫都是最简单的。Matplotlib是最通用的。数据框中的日期是实际日期还是字符串?它是一个日期,由date\u trunc(“分钟”,log\u time)生成。我还看到了一些关于plt.hist的东西,要回答这个问题,我现在需要自己复制这些数据帧。这真是太多的工作了。如果您需要帮助,请从一开始就提供一个。谢谢,这很好,我注意到一个问题是如果我有5个横杆而不是3个横杆,则在没有第一个横杆重叠的情况下移动它们时会遇到问题,除非我缩小横杆的宽度。通过这样做,最终使它工作了
width=0.19 plt.bar(np.arange(len(aa))-(width*2),y.values,width,label=“aa”)plt.bar(np.arange(len(bb))-width,y2.values,width,label=“bb”)plt.bar(np.arange(len(cc)),y3.values,width,label=“cc”)plt.bar(np.arange(len(len(dd))+width,y4,width,label=“dd”)plt.bar(np.arange)(len+宽度*2,y4,宽度,label=“ee”)
有更好的调整方法吗?这将工作tho-thx!使用熊猫。我认为它对我不起作用,因为我试图使aa=df['count'],例如
aa=df1['count']bb=df2['count']cc=df3['count']dfbar=pd.DataFrame({'aa':aa,'bb':bb,'cc':cc},index=dateindex)
我如何用我的源数据正确地将我的值放入aa/bb/cc中?谢谢你的第一句话,我不太清楚你说的“更好”是什么意思。如果你想自动做到这一点,我认为最好的方法是Feingernest的建议,即使用熊猫,就像你在第二条评论中所做的那样。它可以节省您自己编写调整算法的时间。如果你想把它弄得更漂亮,我真的不知道除了画一个更宽的图之外还有什么别的方法,因为空间是有限的。我不能在这里放太多代码。但是如果索引是一致的,它可以是类似于pd.concat([df1,df2,df3],axis=1)的东西。通过这样做,它可以工作了
aa=dict(zip(x,df1['count'])bb=dict(zip(x,df2['count'])cc=dict(zip(x,df3['count'])dd=dict(zip(x,df4['count'])ee=dict(zip(x,df5['count'])
其中x是df['date我也会试试pd.co-ncat谢谢!
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Example data
n=24
dateindex = pd.date_range(pd.datetime(2018, 1, 1), periods=n)
np.random.seed(1)
aa = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)
np.random.seed(2)
bb = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)
np.random.seed(3)
cc = pd.DataFrame(np.random.randn(n), columns=['count'], index=dateindex)

# Non-stacked bar plot
plt.figure(figsize=(16, 6))
width = 0.25
plt.bar(np.arange(len(aa))-width, aa.values, width, label="AA")
plt.bar(np.arange(len(aa)), bb.values, width, label="BB")
plt.bar(np.arange(len(aa))+width, cc.values, width, label="CC")
plt.xticks(np.arange(len(aa)), dateindex, rotation='vertical')

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show()
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Example data
n=24
dateindex = pd.date_range(pd.datetime(2018, 1, 1), periods=n)
np.random.seed(1)
aa = np.random.randn(n)
np.random.seed(2)
bb = np.random.randn(n)
np.random.seed(3)
cc = np.random.randn(n)
df = pd.DataFrame({'AA': aa, 'BB': bb, 'CC': cc}, index=dateindex)

# Non-stacked bar plot
df.plot.bar(figsize=(16, 6))

plt.title("Count by Networks")
plt.legend(title="Network")
plt.show()