按日期升序排列的日期栏频率条形图

Posted

技术标签:

【中文标题】按日期升序排列的日期栏频率条形图【英文标题】:FREQUENCY BAR CHART OF A DATE COLUMN IN AN ASCENDING ORDER OF DATES 【发布时间】:2021-09-25 21:42:43 【问题描述】:

所以,我有一个数据集(其中一些第一行粘贴在这里)。我的目标是绘制“sample_date”列的频率分布。起初对我来说似乎很简单。只需将列转换为日期时间,默认按升序对值(日期)进行排序,最后绘制条形图。但问题是条形图不是按日期的升序显示(这是我想要得到的),而是按与这些日期相对应的值的降序显示。

代码如下:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('dataset.csv')
data['sample_date'] = pd.to_datetime(data['sample_date'])
data = data.sort_values(by='sample_date')
data['sample_date'].value_counts().plot(kind='bar')

这里是 dataset.csv:

,sequence_name,sample_date,epi_week,epi_date,lineage
1,England/MILK-1647769/2021,2021-06-07,76,2021-06-06,C.37
2,England/MILK-156082C/2021,2021-05-06,71,2021-05-02,C.37
3,England/CAMC-149B04F/2021,2021-03-30,66,2021-03-28,C.37
4,England/CAMC-13962F4/2021,2021-03-04,62,2021-02-28,C.37
5,England/CAMC-13238EB/2021,2021-02-23,61,2021-02-21,C.37
0,England/PHEC-L304L78C/2021,2021-05-12,72,2021-05-09,B.1.617.3
1,England/MILK-15607D4/2021,2021-05-06,71,2021-05-02,B.1.617.3
2,England/MILK-156C77E/2021,2021-05-05,71,2021-05-02,B.1.617.3
4,England/PHEC-K305K062/2021,2021-04-25,70,2021-04-25,B.1.617.3
5,England/PHEC-K305K080/2021,2021-04-25,70,2021-04-25,B.1.617.3
6,England/ALDP-153351C/2021,2021-04-23,69,2021-04-18,B.1.617.3
7,England/PHEC-30C13B/2021,2021-04-22,69,2021-04-18,B.1.617.3
8,England/PHEC-30AFE8/2021,2021-04-22,69,2021-04-18,B.1.617.3
9,England/PHEC-30A935/2021,2021-04-21,69,2021-04-18,B.1.617.3
10,England/ALDP-152BC6D/2021,2021-04-21,69,2021-04-18,B.1.617.3
11,England/ALDP-15192D9/2021,2021-04-17,68,2021-04-11,B.1.617.3
12,England/ALDP-1511E0A/2021,2021-04-15,68,2021-04-11,B.1.617.3
13,England/PHEC-306896/2021,2021-04-12,68,2021-04-11,B.1.617.3
14,England/PORT-2DFB70/2021,2021-04-06,67,2021-04-04,B.1.617.3

这是我得到和不想得到的: BAR CHART FOR THE 'SAMPLE_DATE' COLUMN IN A DESCENDING ORDER OF VALUE COUNTS OF THE DATES

【问题讨论】:

你为什么对我们大喊大叫? @PatrickArtner :) 对不起大写 :)。我只是想强调重要的东西:)。不要个人认为:)。 value_counts(ascending=True)?? 【参考方案1】:
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('dataset.csv')
data['sample_date'] = pd.to_datetime(data['sample_date'])
data['sample_date'].value_counts().sort_index().plot(kind='bar') # Use sort_index()

plt.tight_layout()
plt.show()

【讨论】:

【参考方案2】:

value_counts() 为您提供添加标志的选项 - ascending 您只需将其设置为 True,条形图将按升序排列。实际上你根本不需要使用sort_values()

查看value_counts() 文档:https://pandas.pydata.org/docs/reference/api/pandas.Series.value_counts.html

代码:

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv('dataset.csv')
data['sample_date'] = pd.to_datetime(data['sample_date'])
data['sample_date'].value_counts(ascending=True).plot(kind='bar')
plt.show()  

输出:

【讨论】:

以上是关于按日期升序排列的日期栏频率条形图的主要内容,如果未能解决你的问题,请参考以下文章

9 月 1 日在 8 月 31 日之前在 Zeppelin 中按日期排序的条形图,请问如何解决?

Pandas:按日历周分组,然后为实际日期时间绘制分组条形图

使用 plotly-express 按值按降序排列条形图中的条形

并排条形图与列按比例分组(相对频率条形图)

在多列上分组时如何绘制条形图?

如何实现条形图的日期范围