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

使用数据帧。用子图绘制图表--如何使用ax参数

皇甫飞跃
2023-03-14

我不能把我的头围绕轴参数,它包含什么以及如何使用它来制作子情节。

如果有人能解释一下下面的例子,我将不胜感激

fig, axes = plt.subplots(nrows=3, ncols=4, figsize=(15, 10))
for idx, feature in enumerate(df.columns[:-1]):
  df.plot(feature, "cnt", subplots=True, kind="scatter", ax=axes[idx / 4, idx % 4])

更具体地说,以下是我理解的部分(至少我认为我理解)

  • plt。子图返回一个元组,该元组包含图形和轴对象(链接)
  • enumerate()返回一个元组,其中包含功能的索引及其名称(链接)
  • df。绘图使用列名将数据放在图中的子绘图上

这是我不明白的

  • 轴对象包含什么?同样,基于留档和这个答案,我意识到轴包含“轴、刻度、线2D、文本、多边形等”但是
    • 我们用轴[x, y]解决什么?
    • 为什么在这个例子中作者决定使用[idx/4, idx%4]作为值?

共有2个答案

红鸿运
2023-03-14

代码中的axes对象是matplotlibAxes对象的2D Numpy数组。由于调用subplots()需要3行4列,因此数组将是3乘4。对数组进行索引,如axes[r, c],会得到对应于rowr和列cAxes对象,并且可以将该对象作为ax关键字传递绘图方法的参数,以使绘图显示在该轴上。例如,如果你想在第二行和第二列中绘制一些东西,你可以调用图(...,ax=axes[1,1])

代码使用[idx/4, idx%4]作为将索引(从0到11的数字)转换为3×4网格中位置的一种方式。试着用idx依次设置为0到11的每个值来评估这个表达式,你会看到它是如何工作的。

孙清野
2023-03-14

关于数组索引为[idx/4, idx%4]的最后一个问题:

其思想是同时在所有子地块和所有数据帧列上循环。问题是轴数组是二维的,而列数组是一维的。因此,需要决定循环哪些维度,并将循环索引/索引映射到其他维度。

直观的方法是使用两个循环

for i in range(axes.shape[0]):
    for j in range(axes.shape[1]):
        df.plot(df.columns[i*axes.shape[0]+j], "cnt", ... , ax=axes[i,j])

在这里,i*axes.shape[0]j将Numpy数组的二维映射到列列表的单个维度。

在问题的示例中,循环位于列上方,这意味着我们必须以某种方式将一维索引映射到二维。这就是[idx/4,idx%4]所做的。。或者应该这样做。它只能在Python2中工作。为了使它更易于理解和保存版本,实际上应该使用[idx//4,idx%4]/说明使用整数除法。因此,对于前4个idx值(0,1,2,3),idx//4是0,对于下一组4个值,它是1,依此类推<代码>idx%4计算索引模4。所以(0,1,2,3)被映射到(0,1,2,3),然后(4,5,6,7)被再次映射到(0,1,2,3),以此类推。

使用单个循环的替代html" target="_blank">解决方案是展平轴数组:

for idx, feature in enumerate(df.columns[:-1]):
    df.plot(feature, "cnt", ... , ax=axes.flatten()[idx])

或者可能是最像蟒蛇的

for ax, feature in zip(axes.flatten(), df.columns[:-1]):
    df.plot(feature, "cnt", ... , ax=ax)
 类似资料:
  • 问题内容: 我是Android开发的初学者,我正在上课。我的职责是将应用程序中的JSON数据显示为文本和图形。我正在使用Retrofit 2在一个活动中将其显示为文本,但是我在使用图形时遇到了问题,我不知道该怎么做(我仍在学习,到目前为止我所做的一切都是在帮助下来自教程)。 数据如下所示(这是一个示例): 我已经找到了,但是我不确定下一步该怎么做。我应该用数据制作两个数组列表(如果答案是,怎么做?

  • 本文向大家介绍Python使用plt.boxplot() 参数绘制箱线图,包括了Python使用plt.boxplot() 参数绘制箱线图的使用技巧和注意事项,需要的朋友参考一下 Python 绘制箱线图主要用 matplotlib 库里 pyplot 模块里的 boxplot() 函数。 plt.boxplot() 参数详解 1、示例1 代码 图形 2、 示例 2 代码 图形 以上就是本文的全部

  • 我只想从JavaFX图表API生成一个图表图像。我不想显示应用程序窗口,也不想启动应用程序(如果没有必要)。 在start方法内部,我实际上需要访问外部数据以构建系列数据,但是似乎没有办法从start方法访问外部数据,如果我将数据存储在成员变量内部,则当开始叫做。我其实不在乎舞台和场景对象,只要图表图像可以渲染,我应该如何解决问题?我想建立一个可以用输入数据调用的API,用数据绘制图表,并返回文件

  • 问题内容: 我必须使用pdfbox绘制一个饼图。 令数据为: 主题分数百分比累计分数 Sub-1 80 80 80 Sub-2 70 70150 Sub-3 65 65215 Sub-4 90 90305 Sub-5 55 55360 令半径和中心为100像素和(250,400)。 让我们取平行于x轴的初始线。 绘图的初始线条语句将为: contentStream.drawLine(250,400

  • 我必须用pdfbox绘制一个饼图。 让数据是: 设半径和中心为100像素和(250,400)。 让我们取平行于x轴的初始线 绘制初始行语句将为: contentStream。抽绳(250400350400); 我坚持: a)在距离初始线一定程度的圆圈上找到点的x, y坐标,以绘制半径 b)使用贝塞尔曲线在两点之间绘制圆弧。 任何帮助解决问题将不胜感激!

  • 我只是试图用DrawOval()方法画圆,当我运行程序时,它只显示小正方形。我试图将构造函数添加到Surface类,但它不起作用。这是我制作的代码: