Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与Seaborn密谋_Python_Pandas_Matplotlib_Seaborn - Fatal编程技术网

Python 与Seaborn密谋

Python 与Seaborn密谋,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我只是想知道如何在Seaborn中绘制此类图表和数据: data.csv: 1,2,3 2007,05,06 2007,05,06 2007,05,08 2007,05,08 2007,05,12 2007,05,15 2007,05,16 ... 我想要绘制的条形图: 如果有人知道如何用Seaborn和我的数据绘制这种条形图,我将不胜感激。根据您提供的数据,无法创建绘图,因此我制作了一个小样本进行测试。时间有点长,因为你需要处理数据。其主要思想是理解叠加条形图是加性规则条形图 import

我只是想知道如何在Seaborn中绘制此类图表和数据:

data.csv:

1,2,3
2007,05,06
2007,05,06
2007,05,08
2007,05,08
2007,05,12
2007,05,15
2007,05,16
...
我想要绘制的条形图:


如果有人知道如何用Seaborn和我的数据绘制这种条形图,我将不胜感激。

根据您提供的数据,无法创建绘图,因此我制作了一个小样本进行测试。时间有点长,因为你需要处理数据。其主要思想是理解叠加条形图是加性规则条形图

import pandas as pd
import io
import matplotlib.pyplot as plt
import seaborn as sns

# sample data - 3rd column ignored
data = """
year,month,count
2007,05,06
2007,05,06
2007,06,08
2007,06,08
2008,05,12
2008,05,15
2008,06,16
    """
# read data
df = pd.read_csv(io.StringIO(data), delimiter=',')

groups = df.groupby(['year','month'])
plot_data = groups.count() # obtain count of year and month multi-index

# additive barplot (May and June)
sns.barplot(x = plot_data.reset_index(level=1).index.unique(), y = plot_data.sum(axis=0, level=1)['count'], data=df , color = "red", ci=None)
# single bottom plot (in this case May only or "05")
bottom_plot = sns.barplot(x = plot_data.reset_index(level=1).index.unique(), y = plot_data.reorder_levels(['month','year']).loc[5]['count'], color = "#0000A3")

bottom_plot.set_ylabel("Count")
bottom_plot.set_xlabel("Year")

plt.show()


这个过程可以增加到包括所有12个月,但我不知道有哪一个代码可以在不操纵数据的情况下做到这一点。

使用pandas,您可以简单地使用:

df.plot.bar(stacked=True)
因此,您只需首先加载或重塑数据,以月份作为列,以年份作为索引:

import numpy as np
import pandas as pd
import io
import matplotlib.pyplot as plt
import seaborn as sns
# sample data - 3rd column ignored
data = """
1,2,3
2007,05,06
2007,05,06
2007,06,08
2007,06,08
2007,05,06
2007,05,06
2007,06,08
2007,06,08
2007,05,06
2007,05,06
2007,06,08
2007,06,08
2008,03,12
2008,09,15
2008,02,16
2008,04,12
2008,05,15
2008,06,16
2008,03,12
2008,08,15
2008,02,16
2008,09,12
2008,05,15
2008,06,16
    """
# read data
df = pd.read_csv(io.StringIO(data), delimiter=',',names= ['year','count','ignore'],header=0,index_col='year')
nyears = len(np.unique(df.index.values))
df['month']=np.tile(np.arange(1,13),nyears)
#df.drop('ignore',1)
df.pivot(columns='month',values='count').plot.bar(stacked=True)
plt.show()

只需使用内置的“是否在1=年、2=月、3=值内完成”列?或者它们都与时间有关,你在计算?@Leb 1=年,2=月(3在这里不重要,不包括在条形图中),正如你所看到的例子,一个基于月,另一个基于年。例如,以月份为基础,我计算所有1月份。在我的年份范围内,我认为这意味着:1=年,2=值,其中每年有12行,每行是特定月份的值。如果2=月(月数,例如1=一月,您不应该有(2007,05)多次!我收到一个错误“初始值必须是unicode或None,而不是list”