相关疑难解决方法(0)

熊猫条形图更改日期格式

我有一个简单的堆叠线图,它具有我想要使用以下代码时神奇地设置的日期格式.

df_ts = df.resample("W", how='max')
df_ts.plot(figsize=(12,8), stacked=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,当绘制与条形图相同的数据时,日期神秘地将自身转换为丑陋且不可读的格式.

df_ts = df.resample("W", how='max')
df_ts.plot(kind='bar', figsize=(12,8), stacked=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

原始数据进行了一些转换,以获得每周最大值.为什么自动设定日期发生了根本变化?我怎样才能拥有如上所述的格式良好的日期?

这是一些虚拟数据

start = pd.to_datetime("1-1-2012")
idx = pd.date_range(start, periods= 365).tolist()
df=pd.DataFrame({'A':np.random.random(365), 'B':np.random.random(365)})
df.index = idx
df_ts = df.resample('W', how= 'max')
df_ts.plot(kind='bar', stacked=True)
Run Code Online (Sandbox Code Playgroud)

plot matplotlib pandas

41
推荐指数
4
解决办法
2万
查看次数

如何每小时获得一次?

考虑这个简单的例子

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
import matplotlib.dates as mdates

pd.__version__
Out[147]: u'0.22.0'

idx = pd.date_range('2017-01-01 05:03', '2017-01-01 18:03', freq = 'min')

df = pd.Series(np.random.randn(len(idx)),  index = idx)
df.head()
Out[145]: 
2017-01-01 05:03:00   0.4361
2017-01-01 05:04:00   0.9737
2017-01-01 05:05:00   0.8430
2017-01-01 05:06:00   0.4292
2017-01-01 05:07:00   0.5739
Freq: T, dtype: float64
Run Code Online (Sandbox Code Playgroud)

我想绘制这个,并且每小时都有刻度.我用:

fig, ax = plt.subplots()
hours = mdates.HourLocator(interval = 1)  #
h_fmt = mdates.DateFormatter('%H:%M:%S')

df.plot(ax = ax, color = 'black', …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

14
推荐指数
1
解决办法
7470
查看次数

带日期的 Matplotlib - 更改每月数据的标签和刻度

我有一个这样的数据框:

data_ = list(range(106))
index_ =  pd.period_range('3/1/2004', '12/1/2012', freq='M')
df2_ = pd.DataFrame(data = data_, index = index_, columns = ['data'])
Run Code Online (Sandbox Code Playgroud)

我想绘制这个数据框。目前,我正在使用:

df2_.plot()
Run Code Online (Sandbox Code Playgroud)

现在我喜欢控制 x 轴上的标签(可能还有刻度)。特别是,我喜欢在轴上有每月的刻度,并且可能每隔一个月或每季度有一个标签。我也喜欢有垂直的网格线。

我开始研究这个例子,但我已经无法构建 timedelta。

python matplotlib

2
推荐指数
1
解决办法
1万
查看次数

如何在 matplotlib 中将 x 轴作为日期时间的条形图和线图结合起来

我有一个带有 datetimeIndex 的数据帧和两列带有 int 值的数据帧。我想在同一个图上绘制 Col1 作为条形图,将 Col2 作为线图。

重要的功能是在放大时将 x 轴正确标记为日期时间。我认为使用 DateFormatter 的解决方案不起作用,因为我想要动态 xtick 标签。

import matplotlib.pyplot as plt
import pandas as pd
import datetime as dt
import numpy as np

startDate = dt.datetime(2018,1,1,0,0)
nrHours = 144
datetimeIndex = [startDate + dt.timedelta(hours=x) for x in  range(0,nrHours)]

dF = pd.DataFrame(index=datetimeIndex)
dF['Col1'] = np.random.randint(1,3,nrHours)
dF['Col2'] = np.random.randint(3,6,nrHours)

axes = dF[['Col1']].plot(kind='bar')
dF[['Col2']].plot(ax=axes)
Run Code Online (Sandbox Code Playgroud)

看似简单的任务实际上非常具有挑战性。事实上,在网上进行了大量搜索后,我仍然没有找到任何干净的解决方案。

我尝试过使用 pandas 绘图和 matplotlib。主要问题来自条形图,它似乎难以处理日期时间索引(更喜欢整数,在某些情况下它会绘制日期,但采用 Epoch 1970-1-1 样式,相当于 0)。

python matplotlib bar-chart dataframe pandas

2
推荐指数
1
解决办法
2676
查看次数

在 Matplotlib 中绘制带有月份名称(例如一月)的时间序列并在下方显示年份

我目前正在使用以下数据绘制时间散点图(您可以使用这些数据来重现我的绘图)。x 轴绘制的数据是时间,特别是datetime.datetime对象 ( tp_pass),而 y 轴绘制的数据是 -180 到 180 之间的角度 ( azip_pass)。而且,他们都是numpy.array

tp_pass=np.array([datetime.datetime(2019, 10, 29, 1, 4, 43),
        datetime.datetime(2019, 10, 31, 1, 11, 19),
        datetime.datetime(2019, 11, 20, 8, 26, 7),
        datetime.datetime(2019, 11, 20, 23, 50, 43),
        datetime.datetime(2019, 12, 10, 17, 5, 2),
        datetime.datetime(2020, 1, 2, 18, 23, 53),
        datetime.datetime(2020, 2, 13, 10, 33, 44),
        datetime.datetime(2020, 2, 20, 18, 57, 36),
        datetime.datetime(2020, 3, 25, 2, 49, 20),
        datetime.datetime(2020, 4, 10, 16, 44, 56),
        datetime.datetime(2020, 4, …
Run Code Online (Sandbox Code Playgroud)

plot time-series matplotlib python-3.x

1
推荐指数
1
解决办法
1万
查看次数