- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 pandas plot 生成堆叠条形图,它与 matplotlib 的行为不同,但日期总是以错误的格式出现,我无法更改它。我还想要图表上的“总计”线。但是当我尝试添加它时,之前的条形图被删除了。我想制作如下图(由 excel 生成)的图表。黑线是条形的总和。
我在网上看了一些解决方案,但它们只有在条形不多的情况下才好看,所以标签之间有一些空间。
这是我能做的最好的,下面是我使用的代码。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
# DATA (not the full series from the chart)
dates = ['2016-10-31', '2016-11-30', '2016-12-31', '2017-01-31', '2017-02-28', '2017-03-31',
'2017-04-30', '2017-05-31', '2017-06-30', '2017-07-31', '2017-08-31', '2017-09-30',
'2017-10-31', '2017-11-30', '2017-12-31', '2018-01-31', '2018-02-28', '2018-03-31',
'2018-04-30', '2018-05-31', '2018-06-30', '2018-07-31', '2018-08-31', '2018-09-30',
'2018-10-31', '2018-11-30', '2018-12-31', '2019-01-31', '2019-02-28', '2019-03-31']
variables = {'quantum ex sa': [6.878011, 6.557054, 3.229360, 3.739318, 1.006442, -0.117945,
-1.854614, -2.882032, -1.305225, 0.280100, 0.524068, 1.847649,
5.315940, 4.746596, 6.650303, 6.809901, 8.135243, 8.127328,
9.202209, 8.146417, 6.600906, 6.231881, 5.265775, 3.971435,
2.896829, 4.307549, 4.695687, 4.696656, 3.747793, 3.366878],
'price ex sa': [-11.618681, -9.062433, -6.228452, -2.944336, 0.513788, 4.068517,
6.973203, 8.667524, 10.091766, 10.927501, 11.124805, 11.368854,
11.582204, 10.818471, 10.132152, 8.638781, 6.984159, 5.161404,
3.944813, 3.723371, 3.808564, 4.576303, 5.170760, 5.237303,
5.121998, 5.502981, 5.159970, 4.772495, 4.140812, 3.568077]}
df = pd.DataFrame(index=pd.to_datetime(dates), data=variables)
# PLOTTING
ax = df.plot(kind='bar', stacked=True, width=1)
# df['Total'] = df.sum(axis=1)
# df['Total'].plot(ax=ax)
ax.axhline(0, linewidth=1)
ax.yaxis.set_major_formatter(plticker.PercentFormatter())
plt.tight_layout()
plt.show()
这是最适合我的。这比使用 pandas df.plot(kind='bar', stacked=True)
效果更好,因为它允许更好地格式化 x 轴中的日期标签,并且还允许任意数量的系列对于酒吧。
for count, col in enumerate(df.columns):
old = df.iloc[:, :count].sum(axis=1)
bottom_series = ((old >= 0) == (df[col] >= 0)) * old
ax.bar(df.index, df[col], label=col, bottom=bottom_series, width=31)
df['Total'] = df.sum(axis=1)
ax.plot(df.index, df['Total'], color='black', label='Total')
最佳答案
这是你想要的吗:
fig, ax = plt.subplots(1,1, figsize=(16,9))
# PLOTTING
ax.bar(df.index, df['price ex sa'], bottom=df['quantum ex sa'],width=31, label='price ex sa')
ax.bar(df.index, df['quantum ex sa'], width=31, label='quantum ex sa')
total = df.sum(axis=1)
ax.plot(total.index, total, color='r', linewidth=3, label='total')
ax.legend()
plt.show()
编辑:在使用日期时间绘图时似乎存在错误(功能)。我尝试将索引转换为字符串并且它有效:
df.index=df.index.strftime('%Y-%m')
ax = df.plot(kind='bar', stacked=True, width=1)
df['Total'] = df.sum(axis=1)
df['Total'].plot(ax=ax, label='total')
ax.legend()
编辑 2:我想我知道发生了什么。问题是
ax = df.plot(kind='bar', stacked=True)
将 ax
的 x 轴返回/设置为 range(len(df))
,由 df.index
中的相应值标记,但不是 df.index
本身。这就是为什么如果我们在同一个 ax
上绘制第二个系列,它不会显示(由于 xaxis 的不同比例)。所以我尝试了:
# PLOTTING
colums = df.columns
ax = df.plot(kind='bar', stacked=True, width=1, figsize=(10, 6))
ax.plot(range(len(df)), df.sum(1), label='Total')
ax.legend()
plt.show()
它按预期工作
关于python - 在 xlabels 上绘制带有总线和日期的堆积条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56028578/
我的图中有节点,它们的 xlabels 位于它们的左上方。我怎样才能改变这个位置?我希望 xlabels 正好位于节点本身的旁边。 最佳答案 xlp是你想要的属性,但它没有做任何事情。 你不能改变位置
下面的代码在每个循环中绘制了一个图形,我希望将每个矩阵的平均值打印为 x 标签。例如:ave 是 40。我不确定如何将每个图像的 ave 添加到 xlabel。 import matplotlib.p
当我在 IPython 中运行它时: r = (100, 300) b = 100 plt.figure(figsize=(8, 6)) plt.subplot(3,1,1) plt.xlabel('
当我在 IPython 中运行它时: r = (100, 300) b = 100 plt.figure(figsize=(8, 6)) plt.subplot(3,1,1) plt.xlabel('
我正在尝试用文本重命名我的 x 标签并编写以下代码: dow=pd.to_datetime(df1['Dates']).dt.dayofweek Weekdays= ['Monday', 'Tuesd
请问如何设置xlabel的空间?我读过https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xlabel.html但我不明白。我使用 matplot
我正在研究全局恐怖主义数据库,并试图绘制各种目标类型的恐怖分子的条形图。我想为每个 xlabel 分配一个代码,并在图表上打印一个图例,显示目标类型的相应代码 到目前为止我还没有找到解决这个问题的办法
在pyplot模块中可以使用xlabel()和ylabel()函数设置x轴y轴的标签。这两个函数的使用方法非常相似。 使用xlabel()设置x轴标签 函数签名为matplotlib.pyplo
我尝试使用 dot 绘制图形,但出现以下问题 节点标签 b与 a 的边缘重叠至 b .有没有办法以某种方式移动这个标签来避免这种情况? 这是我用来生成图像的代码(使用 dot ) digraph A
这是我的代码: var months = ["January", "February", "March", "April", "May", "June", "July", "August", "Se
我不知道我在这里错过了什么。折线图未显示第一个 x 标签: 这是我的代码: new Morris.Line({ element: 'chart_170', data: [ { y: '2015
有什么方法可以将 xLabel(预测标签) 0、1 移动到混淆矩阵的顶部吗?感谢任何帮助。 from sklearn.metrics import accuracy_score plt.figure(
我正在创建一个绘图,我想在坐标轴和标题上放置标签,但它以某种方式忽略了 plt.xlabel : import matplotlib.pyplot as plt import numpy as np
我正在使用 pandas plot 生成堆叠条形图,它与 matplotlib 的行为不同,但日期总是以错误的格式出现,我无法更改它。我还想要图表上的“总计”线。但是当我尝试添加它时,之前的条形图被删
我正在使用 pygraphviz 为我的项目创建图表。我无法弄清楚如何将节点的 xlabel 居中以及如何更改 xlabel 的颜色。 graph.add_node(row[3], color='go
我编写了一个函数来在此处显示一些图表: def plot_price_series(df, ts1, ts2): # price series line graph fig = plt
绘制图形时使用了中文标题,会出现乱码 原因是matplotlib.pyplot在显示时无法找到合适的字体。 先把需要的字体(在系统盘C盘的windows下的fonts目录内)添加到FontP
我无法设置 xlabel的情节当 我用 Pandas 做 scatter地块 在多个子图中 并指定 c颜色属性列。 例如,这很好用:我可以看到 xlabel : import numpy as np
我正在使用 ggplot2 和 facet_grid,输出格式为 PNG。如何在 x 轴标签中写入符号“Angstroms”?我尝试了 xlab("{\305}") 但它为我打印了一个奇怪的符号。 最
我正在使用下面给出的代码使用 ggplot 在同一页面上绘制多个图形。我不想让每个图表都有自己的 xlabel、ylabel、标题和图例描述,我只希望每个页面都有一个这样的图表。我试图找到解决方案,但
我是一名优秀的程序员,十分优秀!