对不起,我是新来的。我有一个清晰的pd.DataFrame与日期顺序。
初始日期采用以下格式:YYYYMMDD。当我尝试将其转换时,plotly会将日期显示为只能描述为随机数的日期(悬停文本中)。经过大量搜索,我发现我的解决方法(参见代码)是唯一的解决方案。
尽管是真正的问题:如您所见,每个月的条目数量都不相同。当我放下一天时,会把一个月的所有条目放在同一位置。当我使用x = df.index时,我得到了最好的结果,但是没有日期可视化。我想要的是每个条目之间要有均匀的间隔,并有清晰的视觉提示来显示哪个条目属于哪个月。我将在帖子的末尾添加图片以更好地解释我的问题(英语不是我的母语。)
代码:
import pandas as pd
import plotly.express as px
columns = ["date", "farts"]
df = pd.read_csv('test.csv', sep=',', engine='python', names=columns)
# Using a smaller made up csv file for testing. It looks like this:
# 20200119, 50
# 20200115, 40
# 20200105, 30
# 20191215, 40
# 20191120, 35
# 20191115, 12
print(df)
df["date"] = pd.to_datetime(df["date"], format="%Y%m%d")
df["date"] = df["date"].dt.strftime('%Y-%m')
print(df)
#works very well so far:
# before:
# date farts
# 0 20200119 50
# 1 20200115 40
# 2 20200105 30
# 3 20191215 40
# 4 20191120 35
# 5 20191115 12
# after:
# date farts
# 0 2020/01 50
# 1 2020/01 40
# 2 2020/01 30
# 3 2019/12 40
# 4 2019/11 35
# 5 2019/11 12
fig = px.bar(df, x="date", y='farts', width=1000, height=350)
fig.show()
你们有什么想法我可以做些更好的图表?
图片有助于了解:https://i.imgur.com/3Vi9xFi.png
编辑:尝试了一下,我越来越沮丧。要么不显示,日期倒转,等等。...
如果我使用df [“ date”],我将无法阻止从同一月份将条目集中到一个地方。如果我使用df.index,则似乎无法根据日期列来命名x轴条目。
您有2种选择,取决于您想要的东西
首先让我们为示例创建数据:
data = [
["20200119", 50],
["20200115", 40],
["20200105", 30],
["20191215", 40],
["20191120", 35],
["20191115", 12],
]
默认情况下,plotly将日期设置为日期,您可以使用以下方式覆盖它:
df = pd.DataFrame(data, columns=["date", "farts"])
df["date"] = "D" + df["date"] # Add a string so that plotly won't transform to date
fig = px.bar(df, x="date", y='farts')
如果要绘制每月日期,应避免重复。为此,您可以重新采样并对每个月的所有条目进行mean
或sum
:
df = pd.DataFrame(data, columns=["date", "farts"])
df["date"] = pd.to_datetime(df["date"], format="%Y%m%d")
df = df.resample('MS', on='date').mean() # You should not have duplicates
df = df.reset_index() # You need date as a column with plotly express
fig = px.bar(df, x="date", y='farts')