相关疑难解决方法(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万
查看次数

将Pandas DataFrame绘制为同一图表上的Bar和Line

我试图绘制一个图表,其中第一列和第二列数据为条形,然后是第三列数据的行覆盖.

我尝试了以下代码,但这创建了2个单独的图表,但我希望这一切都在一个图表上.

left_2013 = pd.DataFrame({'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],
                     '2013_val': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 6]})

right_2014 = pd.DataFrame({'month': ['jan', 'feb'], '2014_val': [4, 5]})

right_2014_target = pd.DataFrame({'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],
                                   '2014_target_val': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]})


df_13_14 = pd.merge(left_2013, right_2014, how='outer')
df_13_14_target = pd.merge(df_13_14, right_2014_target, how='outer')
df_13_14_target[['month','2013_val','2014_val','2014_target_val']].head(12)

plt.figure()
df_13_14_target[['month','2014_target_val']].plot(x='month',linestyle='-', marker='o') …
Run Code Online (Sandbox Code Playgroud)

python charts matplotlib pandas

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

pandas DataFrame如何混合不同比例的条形图和线条图

我想让大熊猫覆盖条形图和线条图.这两个系列有不同的比例,所以我希望将值绘制在两个"y"轴上.我不能让熊猫一起显示"酒吧"和"线"图.

from pandas import DataFrame

df_eg = DataFrame()
df_eg=DataFrame(data=[(1212,231),(9283,624),(11734,943),(12452,1037),(16766,1037),(120,113)],index=[2014,2015,2016,2017,2018,2019],columns=["Release","Hold"])
Run Code Online (Sandbox Code Playgroud)

这给出了DataFrame

       Release  Hold
2014    1212    231
2015    9283    624
2016    11734   943
2017    12452   1037
2018    16766   1037
2019    120     113
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试将"释放"绘制为条形图并将"保持"列绘制为具有双轴的线,则仅获得该线.

fig, ax = plt.subplots()
ax2 = ax.twinx()
plt.hold(False)
df_eg["Release"].plot(ax=ax,kind="bar")
df_eg["Hold"].plot(ax=ax2, style='r-', secondary_y=True)
ax.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)

pandas_plot_without_bar_shwoing_up

但是,如果我将两者都绘制为线条.两个值都显示出来.我想知道如何使条形图和线条出现在同一个图上.我正在使用pandas版本'0.16.2'和matplotlib版本'1.3.1'.

fig, ax = plt.subplots()
ax2 = ax.twinx()
plt.hold(False)
df_eg["Release"].plot(ax=ax,kind="line")
df_eg["Hold"].plot(ax=ax2, style='r-', secondary_y=True)
ax.legend(loc='best')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python plot matplotlib pandas

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

如何在 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 ×4

pandas ×4

python ×3

plot ×2

bar-chart ×1

charts ×1

dataframe ×1