我在拼凑matplotlib文档方面遇到了一些麻烦,尤其是对于我的数据集。我认为我的代码块足够小,尽管阅读了文档,但仍然显示出我缺乏理解。我曾经试图用作参考的文档最初是用来创建折线图https://matplotlib.org/gallery/text_labels_and_annotations/date.html
的我一直在尝试绘制一个包含两列的numpy数组post_records
。我正在使用社交媒体数据,因此第一列用于post_ids
,第二列用于datetime_obj_col
,我设法使用一些脚本从csv文件读取了该列。
我设法在matplotlib中使用此数据创建了一个折线图,但我不太了解如何制作直方图。
现在,当我运行程序时,什么也没显示
fig, ax = plt.subplots()
hist, bins, patch_lst = ax.hist(post_records[:,1], bins=range(31)) # thought that bins could be a sequence, wanted to create 31 bins for 31 total days in a month
ax.plot(hist, bins)
ax.set_xlabel('Days')
ax.set_ylabel('frequency')
ax.set_title(r'Histogram of Time')
plt.show() # shows nothing
编辑如何复制此内容
def create_dataframe_of_datetime_objects_and_visualize():
datetime_lst = [1521071920000000000, 1521071901000000000, 1521071844000000000, 1521071741000000000, 1521071534000000000] # to get this variable I loaded my original dataframe with 1980000, sliced the first 5 entries, then printed out the 'datetime_obj_col'. I can't exactly remember what this format is called, I think it's unix time.
id_lst = [974013, 974072, 327212, 123890, 438201]
for each in range(len(datetime_lst)):
datetime_lst[each] = pd.to_datetime(datetime_lst[each], errors='coerce')
datetime_lst[each] = datetime_lst[each].strftime("%d-%b-%y %H:%M:%S")
datetime_lst[each] = pd.to_datetime(datetime_lst[each], errors='coerce', dayfirst=True, format="%d-%b-%y %H:%M:%S")
datetime_lst = pd.Series(datetime_lst)
df = pd.DataFrame({'tweet_id':id_lst, 'datetime_obj_col': datetime_lst})
gb_var = df.groupby(df["datetime_obj_col"].dt.month)
gb_var_count = gb_var.count()
gb_var.plot(kind="bar")
plt.show()
请注意,我不再使用直方图。但是应该出现两个错误,如下:
回溯(最近通话最近): 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”中的第918行 结果= self._python_apply_general(f) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”,第936行,在_python_apply_general中 自轴) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”中的第2273行 res = f(群) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”,第541行,在f中 返回self.plot(* args,** kwargs) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,第2941行,在致电中 sort_columns = sort_columns,** kwds) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,行1977,在plot_frame中 ** kwds) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py“,第1804行,在_plot中 plot_obj.generate() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py“,第266行,在generate中 self._post_plot_logic_common(ax,self.data) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,第405行,在_post_plot_logic_common中 self._apply_axis_properties(ax.yaxis,fontsize = self.fontsize) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,第478行,在_apply_axis_properties中 标签= axis.get_majorticklabels()+ axis.get_minorticklabels() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py“,第1245行,在get_majorticklabels中 刻度= self.get_major_ticks() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py“,第1396行,在get_major_ticks中 numticks = len(self.get_major_locator()()) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1249行,在致电中 self.refresh() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1269行,刷新 dmin,dmax = self.viewlim_to_dt() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1026行,在viewlim_to_dt中 .format(vmin)) ValueError:视图限制最小值0.0小于1,并且是无效的Matplotlib d 吃了价值。如果将非datetime值传递给h的轴,通常会发生这种情况 作为日期时间单位
编辑:
这似乎是一个与试图使用hist()绘制一列日期时间对象有关的错误。
我从post_records
中获取了数据,该数据是一个已加载的numpy数组,其中存储了一个二维数据集,该数据集包含198000+个帖子ID和日期时间对象。
这是称为创建日期时间对象的函数的代码。它将打开一个csv文件“ tweet_time_info_preprocessed.csv”,该文件只有三列:'tweet_id“” tweet_created_at_date
“和” tweet_created_at_hour.
“以下是将tweet_created_at_date
和{使用tweet_created_at_hour
库pandas
方法将{1}}列格式化为日期时间对象。
csv文件示例
to_datetime()
然后我有 def create_datetime_objects():
with open("post_time_info_preprocessed.csv", 'r', encoding='utf8') as time_csv:
mycsv = csv.reader(time_csv)
progress = 0
for row in mycsv:
progress +=1
if progress == 1: #header row
continue
if progress % 10000 == 0:
print(progress)
each_post_datetime_lst = []
each_post_datetime_lst.append(row[0])
time_str = str(row[1]) + " " + str(row[2])
a_date_object = pd.to_datetime(time_str, dayfirst=True, format="%d-%b-%y %H:%M:%S")
each_post_datetime_lst.append(a_date_object)
post_and_datetime_lst.append(each_tweet_datetime_lst)
numpy_arr_of_tweets_and_datetimes = np.array(tweets_and_datetime_objs)
np.save(np_save_path, numpy_arr_of_tweets_and_datetimes)
visualize_objects_histogram()
因此,我将数据帧的5行切开并将其存储到def visualize_objects_histogram():
print("Visualizing timeplot as histogram")
post_records= np.load("tweets_and_datetime_objects.npy")
df = pd.DataFrame(data=post_records, columns=['post_id', 'datetime_obj_col'])
df_sliced = df[0:5]
print(df_sliced)
fig, ax = plt.subplots()
hist, bins, patch_lst = ax.hist(df_sliced['datetime_obj_col'], bins=range(5))
ax.plot(hist, bins)
ax.set_xlabel('Days')
ax.set_ylabel('frequency')
ax.set_title('Histogram of Time')
plt.show()
中。我运行这段代码,一个空白的空白窗口出现。打印df_slice
给出
df_slice
空白的空白窗口还附带一个错误消息。很长。
Tkinter回调中的异常 追溯(最近一次通话): 文件“ C:\ Users \ biney \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ tkinter__i nit__.py”,第1699行,在致电中 返回self.func(* args) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ backends_backend_tk.py“,第227行,调整大小 self.draw() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ backends \ backend_tkagg.py“,第12行,绘制中 超级(FigureCanvasTkAgg,self).draw() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ backends \ backend_agg.py“,第433行,在绘图中 self.figure.draw(self.renderer) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ artist.py”,第55行,在draw_wrapper中 返回画图(艺术家,渲染器,* args,** kwargs) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ Figure.py“,第1475行,在绘制中 渲染器,自我,艺术家,self.suppressComposite) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ image.py”,第141行,在_draw_list_compositing_images中 a.draw(渲染器) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ artist.py”,第55行,在draw_wrapper中 返回画图(艺术家,渲染器,* args,** kwargs) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axes_base.py“,第2607行,在绘制中 mimage._draw_list_compositing_images(渲染器,自我,艺术家) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ image.py”,第141行,在_draw_list_compositing_images中 a.draw(渲染器) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ artist.py”,第55行,在draw_wrapper中 返回画图(艺术家,渲染器,* args,** kwargs) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py“,第1190行,在绘制中 ticks_to_draw = self._update_ticks(渲染器) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py”,第1028行,在_update_ticks中 tick_tups = list(self.iter_ticks())#iter_ticks调用定位器 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py“,第971行,位于iter_ticks中 majorLocs = self.major.locator() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1249行,在致电中 self.refresh() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1269行,刷新 dmin,dmax = self.viewlim_to_dt() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1026行,在viewlim_to_dt中 .format(vmin)) ValueError:视图限制最小值-0.19500000000000003小于1,并且是inv 确定Matplotlib日期值。如果您传递非日期时间值,通常会发生这种情况 到具有日期时间单位的轴
此错误消息重复5次,其“视图限制”值略有不同。对于我的5条记录,可能有5条错误消息。我认为错误消息与以下在线版本的dates.py最密切相关...可能是错误的:https://fossies.org/linux/matplotlib/lib/matplotlib/dates.py(在1022行附近,我将很快检查计算机上的实际文件)。
我将尝试这篇文章中的内容,看看是否有帮助:Can Pandas plot a histogram of dates?
编辑2: 先前的stackoverflow向我介绍了两种有用的方法,但是它们没有用。我将显示...功能更改为以下内容
tweet_id datetime_obj_col
0 974072352958042112 2018-03-14 23:58:40
1 974072272578166784 2018-03-14 23:58:21
2 974072032177598464 2018-03-14 23:57:24
3 974071601313533953 2018-03-14 23:55:41
4 974070732777914368 2018-03-14 23:52:14
它给出以下输出/错误消息。
def visualize_datetime_objects_with_pandas():
tweets_and_datetime_objects = np.load("tweets_and_datetime_objects.npy") # contains python datetime objects
print("with pandas")
print(tweets_and_datetime_objects.shape)
df = pd.DataFrame(data=tweets_and_datetime_objects, columns=['tweet_id', 'datetimeobj'])
pandas_freq_dict = df['datetimeobj'].value_counts().to_dict()
#print(pandas_freq_dict)
print(len(list(pandas_freq_dict.keys())))
print(list(pandas_freq_dict.keys())[0])
print(list(pandas_freq_dict.values())[1])
plt.plot(pandas_freq_dict.keys(), pandas_freq_dict.values())
#df = df.set_index('datetimeobj')
# changing the index of this dataframe to a time index
#df['datetimeobj'].plot(kind='line', style=['--'])
plt.show()
将时间图可视化为直方图 tweet_id datetime_obj_col datetime_obj_col 14 5 5 tweet_id datetime_obj_col datetime_obj_col 14 5 5 追溯(最近一次通话): 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”中的第918行 结果= self._python_apply_general(f) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”,第936行,在_python_apply_general中 自轴) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”中的第2273行 res = f(群) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ groupby \ groupby.py”,第541行,在f中 返回self.plot(* args,** kwargs) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,第2941行,在致电中 sort_columns = sort_columns,** kwds) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,行1977,在plot_frame中 ** kwds) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py“,第1804行,在_plot中 plot_obj.generate() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py“,第266行,在generate中 self._post_plot_logic_common(ax,self.data) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,第405行,在_post_plot_logic_common中 self._apply_axis_properties(ax.yaxis,fontsize = self.fontsize) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ plot ting_core.py”,第478行,在_apply_axis_properties中 标签= axis.get_majorticklabels()+ axis.get_minorticklabels() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py“,第1245行,在get_majorticklabels中 刻度= self.get_major_ticks() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ axis.py“,第1396行,在get_major_ticks中 numticks = len(self.get_major_locator()()) 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1249行,在致电中 self.refresh() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1269行,刷新 dmin,dmax = self.viewlim_to_dt() 文件“ C:\ Users \ biney \ AppData \ Roaming \ Python \ Python36 \ site-packages \ matplotlib \ dates.py”,第1026行,在viewlim_to_dt中 .format(vmin)) ValueError:视图限制最小值0.0小于1,并且是无效的Matplotlib d 吃了价值。如果将非datetime值传递给h的轴,通常会发生这种情况 作为日期时间单位