当前位置: 首页 > 知识库问答 >
问题:

Python使用次要的y轴制作组合条形图和线图

伍胡媚
2023-03-14

我正在尝试绘制一些csv数据。我想绘制一些csv数据。数据如下所示。我试图将第1-11列绘制为条形图,将第12列绘制为直线。我可以使用以下代码分别绘制这两个图,但是如何组合这些图并同时具有辅助y轴?

下面是我正在绘制的数据示例

DateTime    e1      e2       e3      e4      e5     e6      e7      e8      e9       e10      e11    p12
11/1/2014   1772    1926    1852    1513    1713    1568    1721    1822    1665    1449    1874    347
11/2/2014   19884   20365   19799   18017   18394   19383   20089   19929   20277   19522   19882   3710
11/3/2014   28697   29692   28881   25031   26731   28207   29095   29109   29577   28714   28926   5614
11/4/2014   24906   26061   25174   21745   23623   24126   24954   25344   25679   24406   25288   4990
11/5/2014   9059    9821    9116    7546    8742    8530    8910    9372    9214    8227    9366    1734
11/6/2014   1396    1691    1569    1176    1353    1223    1347    1541    1355    1044    1580    282
11/7/2014   10039   10416   9902    8223    9667    9511    9877    10106   10180   9524    10138   1857
11/8/2014   26746   27694   27128   23694   25520   26351   27176   27155   27704   26979   26995   5155
11/9/2014   14797   15567   14818   13556   14499   14244   14899   14979   15225   14171   14929   2846
11/10/2014  26059   27443   26573   22844   24655   25538   26658   26690   27303   26094   26471   5304

下面是我用来分别绘制它们的代码

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", index_col="DateTime", parse_dates=True)
df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10]].plot(kind='bar')
df.iloc[:,11].plot(linestyle='-', marker='o')
plt.show()

共有2个答案

邵祺
2023-03-14

你只需要把它们画在同一个轴上

ax = df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10]].plot(kind='bar')
df.iloc[:,12].plot(linestyle='-', marker='o', ax = ax)

ax.set_xticklabels(df.DateTime, rotation=40) #set the x-ticks to datetime column and rotate

是我用来在同一个绘图上绘制两个图形的代码

喻嘉泽
2023-03-14

不幸的是,如果x轴是日期轴,则在熊猫中无法将条形图和线形图绘制到相同的轴上。

解决方法是改用matplotlib条形图

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", index_col="DateTime", parse_dates=True, delim_whitespace=True)

fig, ax= plt.subplots()

ax.plot_date(df.index, df.iloc[:,11], '-')
for i in range(10):
    diff = df.index[1]-df.index[0]
    spacing = diff/(1.3*len(df.columns))
    ax.bar(df.index+(-5+i)*spacing, df.iloc[:,i], 
           width=spacing/diff, label=df.columns[i]) 
plt.legend()
plt.gcf().autofmt_xdate()
plt.show()

如果我们忽略点是日期这一事实,就有可能在同一轴上绘制条形图和线形图。在下面的代码中,请记住,我们不将第一列作为索引读取。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", parse_dates=True, delim_whitespace=True)

ax = df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10,11]].plot(kind='bar')
df.iloc[:,12].plot(linestyle='-', marker='o', ax = ax)

ax.set_xticklabels(df.DateTime, rotation=40) 
plt.show()

因此,该方法将生成一个图形,其中条形图和线条点仅按其索引(不是日期)排序。这可能是可以接受的,也可能不是,这取决于日期的间隔是否相等。

例如,如果我们更改输入文件以跳过日期(11/6/2014不存在),代码将产生

尽管实际日期并非如此,但条形图和线点的间距仍然相等。

绘制相同的数据,从我们得到的答案开始,用matplotlib代码跳过一天

事实上,2014年11月6日失踪。

 类似资料:
  • Highcharts 组合图 以下实例演示了双Y轴, 柱形图,线条图组合。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 yAxis 配置 在 yAxis 属性中添加两条Y轴的值 。 var yAxis = [{ // 第一条Y轴 }, { // 第二条Y轴 } }] 实例 文件名:highcharts_combin

  • 通过使用matplotlib,我想绘制随时间变化的训练精度、验证精度、训练误差和验证误差。x轴是所有曲线的迭代次数。我想为精度值保留左x轴,为损耗值保留右y轴,然后在同一个图上绘制所有四个。 为了做到这一点,我尝试了几件事,最后我没有达到我想要的程度。 有人能帮我吗? 我的代码(没有按我的要求工作): 我想这样做(但我没有3条曲线,而是4条曲线)(我从这里拍摄图像:https://datascie

  • 我正在制作一个熊猫柱状图,图中显示了原始计数,但是我想用这些计数的百分比作为一个整体来标注柱状图。我见过很多人使用< code>ax.patches方法来注释,但是我的值与实际条的< code>get_height无关。 这是一些玩具数据。产生的图将是特定类型的单个计数。但是,我想在这个特定的条上添加注释,表示这个特定类型对这个人的姓名的所有类型的百分比总和。 如果您需要更多澄清,请告诉我。

  • 我刚刚开始学习为Android编码和开发。 现在,我正在尝试这样做:Project Fi App UI然而,我在MPAndroidChart库中找不到参数或方法来设置条形图(或我正在使用的水平条形图)中条形图的比例。条形图中的条形图只是自动决定其比例。我想要的是一个固定的Y轴最大范围,图中条形的比例根据其值而变化。 另一个问题是,我无法摆脱每个酒吧上的标签。我写道 但条的右边仍然有一个值。 包含条

  • 本文向大家介绍python绘制双Y轴折线图以及单Y轴双变量柱状图的实例,包括了python绘制双Y轴折线图以及单Y轴双变量柱状图的实例的使用技巧和注意事项,需要的朋友参考一下 近来实验室的师姐要发论文,由于论文交稿时间临近,有一些杂活儿需要处理,作为实验室资历最浅的一批,我这个实习生也就责无旁贷地帮忙当个下手。今天师姐派了一个小活,具体要求是: 给一些训练模型的迭代次数,训练精度的数据,让我做成图

  • Highcharts 组合图 以下实例演示了柱形图,线条图,饼图的组合。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。 配置 series 配置 设置 series 的 type 属性为 column/line/pie ,series.type 描述了数据列类型。默认值为 "line"。 var series = { type: 'colu

  • 我是Python新手,需要使用pyplot和matplotlib生成条形图。到目前为止,我是这样尝试的(我只附上了重要的代码片段):

  • 我很难创建一个条形图,其中包含两个不同的y轴和每个x值(类别)的两个条形图。我有不同类型的数据类别(见下文),每个类别我都有两个值,我想并排绘制(和)。但是,每个类别的值相距甚远,这使得类别的条形几乎不可见。因此,我想添加第二个y轴(一个用于,一个用于),以允许在两个类别之间进行比较。 示例数据: 我使用下面的R代码(ggplot2)来创建绘图: 和,但我没有设法将y轴分配给数据类型。 我很高兴每