Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
如何从日期时间列表(python3、pandas、matplotlib)生成图形?_Python_Pandas_Datetime_Matplotlib_Graph - Fatal编程技术网

如何从日期时间列表(python3、pandas、matplotlib)生成图形?

如何从日期时间列表(python3、pandas、matplotlib)生成图形?,python,pandas,datetime,matplotlib,graph,Python,Pandas,Datetime,Matplotlib,Graph,我在可视化日期时间数据方面遇到问题 我想写的是一段代码,它使用python matplotlib库从日期时间日期以(%Y%m%d)格式生成图表 下面是到目前为止我的源代码 我编写了一个代码,将列表生成到一个数据帧中 neg_date = pd.to_datetime(neg_date, format='%Y-%m-%d') neg_date_data = pd.DataFrame({'datetime':neg_date}) neg_date (输出如下所示:) 现在我必须计算每年每月的日期数

我在可视化日期时间数据方面遇到问题

我想写的是一段代码,它使用python matplotlib库从日期时间日期以(
%Y%m%d
)格式生成图表

下面是到目前为止我的源代码

我编写了一个代码,将列表生成到一个数据帧中

neg_date = pd.to_datetime(neg_date, format='%Y-%m-%d')
neg_date_data = pd.DataFrame({'datetime':neg_date})
neg_date
(输出如下所示:)

现在我必须计算每年每月的日期数。我在解决这个问题上遇到了困难。这是我在这个网站上找到的代码

d = {}
neg_d = []
for date in neg_date_list:
    pubdate, time = date.split('T')
    year, month, date = pubdate.split('-')
    if year in d:
        if month in d[year]:
            d[year][month].append(date)
        else:
            d[year][month] = [date]
    else:
        d[year] = {month: [date]}
neg_d.append(d)
#print(json.dumps(d, indent=4))
print(neg_d)

df = pd.DataFrame(neg_d, index = ['monthdate'])
df
(然后是输出)

如何提取每个月的日期数,然后从中生成图表

这是全部代码

pos_date = [i.split('T', 1)[0] for i in pos_date_list]
pos_date = pd.to_datetime(pos_date, format='%Y-%m-%d')
pos_date_data = pd.DataFrame({'datetime':pos_date})
neu_date = [i.split('T', 1)[0] for i in neu_date_list]
neu_date = pd.to_datetime(neu_date, format='%Y-%m-%d')
neu_date_data = pd.DataFrame({'datetime':neu_date})
neg_date = [i.split('T', 1)[0] for i in neg_date_list]
neg_date = pd.to_datetime(neg_date, format='%Y-%m-%d')
neg_date_data = pd.DataFrame({'datetime':neg_date})
neg_date
代码如下:

%matplotlib inline
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.cbook as cbook

startdate = "2018-07-04"
N = 20
drange = pd.date_range(startdate, periods=N, freq="MS")

#generate dataframe
df = pd.DataFrame({'Positive': pos_date ,'Neutral': neu_date ,
                   'Negative' : neg_date }, index=drange)

如何修复代码以显示不同的日期数?

使用:

然后:


如果我有两个以上的列表并将它们合并到一个图中,我应该如何编写代码?使用“pos_date_data”、“neu_date_data”和“neg_date_date”,9我希望生成以日期数为列、月份为行的整个时间图。在范围:startdate=“2018-07-04”N=20 drange=pd.date\u range(startdate,periods=N,freq=“MS”)中,我得到的三个列表“pos\u date\u data”、“neu\u date\u data”、“neg\u date\u data”包含不同的日期时间项。实际上是从注释信息(publishedAt)中提取的数据。然后我用情绪(积极的、消极的、中立的)把它们分开。我想展示转换的多样性。@Jakharo-好的,你能创建吗?@Jakharo-没有新帖子,编辑@jezreal-已存在的内容。我想的是
df=pd.DataFrame({'Positive':pos_date,'Neutral':neu date,'Negative':neg_date},index=drange)
,有可能吗?不是每个列表都有不同的长度吗?如果通过
print(df.tail())
测试最后一行是否正确?实际上该行不正确。那条线会出错。所以我在寻找另一个解决方案。
pos_date = [i.split('T', 1)[0] for i in pos_date_list]
pos_date = pd.to_datetime(pos_date, format='%Y-%m-%d')
pos_date_data = pd.DataFrame({'datetime':pos_date})
neu_date = [i.split('T', 1)[0] for i in neu_date_list]
neu_date = pd.to_datetime(neu_date, format='%Y-%m-%d')
neu_date_data = pd.DataFrame({'datetime':neu_date})
neg_date = [i.split('T', 1)[0] for i in neg_date_list]
neg_date = pd.to_datetime(neg_date, format='%Y-%m-%d')
neg_date_data = pd.DataFrame({'datetime':neg_date})
neg_date
%matplotlib inline
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.cbook as cbook

startdate = "2018-07-04"
N = 20
drange = pd.date_range(startdate, periods=N, freq="MS")

#generate dataframe
df = pd.DataFrame({'Positive': pos_date ,'Neutral': neu_date ,
                   'Negative' : neg_date }, index=drange)
df = pd.crosstab(neg_date_data['datetime'].dt.month.rename('m'),
                 neg_date_data['datetime'].dt.year.rename('y'))
print (df)
y  2018  2020
m            
1     0     8
2     0     2
7    10     0
df.plot()