创建直方图并了解maplotlib轴和子图

时间:2018-06-20 02:31:29

标签: python datetime matplotlib

我在拼凑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
  • 我需要将什么传递给ax.plot?我不清楚如何传递我的x数据集
    • 为什么窗口不显示?

编辑如何复制此内容

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_hourpandas方法将{1}}列格式化为日期时间对象。

csv文件示例

enter image description here

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的轴,通常会发生这种情况 作为日期时间单位

0 个答案:

没有答案