Pandas 2.2 中文官方教程和指南(十八)(2)

简介: Pandas 2.2 中文官方教程和指南(十八)

Pandas 2.2 中文官方教程和指南(十八)(1)https://developer.aliyun.com/article/1509791

关键字 c 可以作为列的名称,为每个点提供颜色:

In [75]: df.plot.scatter(x="a", y="b", c="c", s=50); 

如果传递给 c 的是一个分类列,则会生成一个离散的颜色条:

新版本 1.3.0 中添加。

In [76]: df.plot.scatter(x="a", y="b", c="species", cmap="viridis", s=50); 

你可以传递 matplotlib 支持的其他关键字给 scatter。下面的示例展示了使用 DataFrame 列作为气泡大小的气泡图。

In [77]: df.plot.scatter(x="a", y="b", s=df["c"] * 200); 

查看 scatter 方法和 matplotlib scatter 文档 了解更多。### 六边形 bin 图

你可以使用 DataFrame.plot.hexbin() 创建六边形 bin 图。如果你的数据过于密集而无法单独绘制每个点,则六边形 bin 图可以作为散点图的有用替代品。

In [78]: df = pd.DataFrame(np.random.randn(1000, 2), columns=["a", "b"])
In [79]: df["b"] = df["b"] + np.arange(1000)
In [80]: df.plot.hexbin(x="a", y="b", gridsize=25); 

一个有用的关键字参数是 gridsize;它控制 x 方向上的六边形数量,默认为 100。更大的 gridsize 意味着更多、更小的 bins。

默认情况下,计算每个 (x, y) 点周围的计数直方图。你可以通过将值传递给 Creduce_C_function 参数来指定替代聚合。C 指定每个 (x, y) 点的值,而 reduce_C_function 是一个函数,接受一个参数,将一个 bin 中的所有值减少到一个单一的数字(例如 meanmaxsumstd)。在这个示例中,位置由列 ab 给出,而值由列 z 给出。使用 NumPy 的 max 函数对 bins 进行聚合。

In [81]: df = pd.DataFrame(np.random.randn(1000, 2), columns=["a", "b"])
In [82]: df["b"] = df["b"] + np.arange(1000)
In [83]: df["z"] = np.random.uniform(0, 3, 1000)
In [84]: df.plot.hexbin(x="a", y="b", C="z", reduce_C_function=np.max, gridsize=25); 

查看 hexbin 方法和 matplotlib hexbin 文档 了解更多。### 饼图

您可以使用DataFrame.plot.pie()Series.plot.pie()创建饼图。如果您的数据包含任何NaN,它们将自动填充为 0。如果数据中有任何负值,将引发ValueError

In [85]: series = pd.Series(3 * np.random.rand(4), index=["a", "b", "c", "d"], name="series")
In [86]: series.plot.pie(figsize=(6, 6)); 

对于饼图,最好使用正方形图形,即图形纵横比为 1。您可以创建宽度和高度相等的图形,或者在绘图后通过调用ax.set_aspect('equal')来强制纵横比相等。

请注意,使用DataFrame创建饼图需要通过y参数指定目标列或subplots=True。当指定y时,将绘制所选列的饼图。如果指定了subplots=True,将为每列绘制饼图子图。默认情况下,每个饼图中都会绘制图例;指定legend=False以隐藏图例。

In [87]: df = pd.DataFrame(
 ....:    3 * np.random.rand(4, 2), index=["a", "b", "c", "d"], columns=["x", "y"]
 ....: )
 ....: 
In [88]: df.plot.pie(subplots=True, figsize=(8, 4)); 

您可以使用labelscolors关键字来指定每个楔形的标签和颜色。

警告

大多数 pandas 绘图使用labelcolor参数(请注意这两个参数上没有“s”)。为了与matplotlib.pyplot.pie()保持一致,您必须使用labelscolors

如果要隐藏楔形标签,请指定labels=None。如果指定了fontsize,则该值将应用于楔形标签。此外,matplotlib.pyplot.pie()支持的其他关键字也可以使用。

In [89]: series.plot.pie(
 ....:    labels=["AA", "BB", "CC", "DD"],
 ....:    colors=["r", "g", "b", "c"],
 ....:    autopct="%.2f",
 ....:    fontsize=20,
 ....:    figsize=(6, 6),
 ....: );
 ....: 

如果传递的值总和小于 1.0,则它们将被重新缩放,使其总和为 1。

In [90]: series = pd.Series([0.1] * 4, index=["a", "b", "c", "d"], name="series2")
In [91]: series.plot.pie(figsize=(6, 6)); 

查看更多内容,请参阅matplotlib 饼图文档。 ## 使用缺失数据绘图

pandas 在绘制包含缺失数据的DataFrameSeries时会尝试实用。根据绘图类型,缺失值将被删除、省略或填充。

绘图类型 NaN 处理
折线图 在 NaN 处留空
折线图(堆叠) 填充 0
条形图 填充 0
散点图 删除 NaN
直方图 删除 NaN(列)
箱线图 删除 NaN(列)
面积图 填充 0
KDE 删除 NaN(列)
六边形图 删除 NaN
饼图 填充 0

如果默认设置不符合您的要求,或者您想明确指定如何处理缺失值,请考虑在绘图之前使用fillna()dropna()。## 绘图工具

这些函数可以从pandas.plotting中导入,并将SeriesDataFrame作为参数。

散点矩阵图

你可以使用pandas.plotting中的scatter_matrix方法创建散点图矩阵:

In [92]: from pandas.plotting import scatter_matrix
In [93]: df = pd.DataFrame(np.random.randn(1000, 4), columns=["a", "b", "c", "d"])
In [94]: scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal="kde"); 

### 密度图

你可以使用Series.plot.kde()DataFrame.plot.kde()方法创建密度图。

In [95]: ser = pd.Series(np.random.randn(1000))
In [96]: ser.plot.kde(); 

### 安德鲁斯曲线

安德鲁斯曲线允许我们将多变量数据绘制为大量曲线,这些曲线是使用样本属性作为傅立叶级数的系数创建的,详见维基百科条目。通过为每个类别的曲线着不同颜色,可以可视化数据聚类。属于同一类别样本的曲线通常会更接近并形成更大的结构。

注意:可在此处获取“Iris”数据集。

In [97]: from pandas.plotting import andrews_curves
In [98]: data = pd.read_csv("data/iris.data")
In [99]: plt.figure();
In [100]: andrews_curves(data, "Name"); 

### 平行坐标

平行坐标是一种用于绘制多变量数据的绘图技术,详见维基百科条目。平行坐标允许我们看到数据中的聚类,并通过视觉估计其他统计数据。使用平行坐标,点被表示为连接的线段。每条垂直线代表一个属性。一组连接的线段代表一个数据点。倾向于聚类的点会更接近。

In [101]: from pandas.plotting import parallel_coordinates
In [102]: data = pd.read_csv("data/iris.data")
In [103]: plt.figure();
In [104]: parallel_coordinates(data, "Name"); 

### 滞后图

滞后图用于检查数据集或时间序列是否是随机的。随机数据不应在滞后图中显示任何结构。非随机结构意味着底层数据不是随机的。可以传递lag参数,当lag=1时,图形基本上是data[:-1] vs. data[1:]

In [105]: from pandas.plotting import lag_plot
In [106]: plt.figure();
In [107]: spacing = np.linspace(-99 * np.pi, 99 * np.pi, num=1000)
In [108]: data = pd.Series(0.1 * np.random.rand(1000) + 0.9 * np.sin(spacing))
In [109]: lag_plot(data); 

### 自相关图

自相关图通常用于检查时间序列中的随机性。这是通过计算不同时间滞后处的数据值的自相关来实现的。如果时间序列是随机的,这些自相关应该在任何时间滞后分离处接近零。如果时间序列是非随机的,那么一个或多个自相关将显着非零。图中显示的水平线对应于 95%和 99%的置信区间。虚线是 99%的置信区间。有关自相关图的更多信息,请参阅Wikipedia 条目

In [110]: from pandas.plotting import autocorrelation_plot
In [111]: plt.figure();
In [112]: spacing = np.linspace(-9 * np.pi, 9 * np.pi, num=1000)
In [113]: data = pd.Series(0.7 * np.random.rand(1000) + 0.3 * np.sin(spacing))
In [114]: autocorrelation_plot(data); 

### Bootstrap 图

Bootstrap 图用于直观评估统计量(如均值、中位数、中程等)的不确定性。从数据集中选择指定大小的随机子集,计算该子集的统计量,然后重复该过程指定次数。生成的图和直方图构成了 Bootstrap 图。

In [115]: from pandas.plotting import bootstrap_plot
In [116]: data = pd.Series(np.random.rand(1000))
In [117]: bootstrap_plot(data, size=50, samples=500, color="grey"); 

### RadViz

RadViz 是一种可视化多变量数据的方法。它基于简单的弹簧张力最小化算法。基本上,您在平面上设置一堆点。在我们的情况下,它们在单位圆上等距分布。每个点代表一个单独的属性。然后,您假装数据集中的每个样本都通过弹簧连接到这些点,弹簧的刚度与该属性的数值成比例(它们被归一化为单位间隔)。我们的样本定居到的平面上的点(在我们的样本上作用的力处于平衡状态的地方)是我们的样本将被绘制的点。根据该样本属于哪个类别,它将以不同的颜色着色。有关更多信息,请参阅 R 包Radviz

注意: “鸢尾花”数据集可在此处获取。

In [118]: from pandas.plotting import radviz
In [119]: data = pd.read_csv("data/iris.data")
In [120]: plt.figure();
In [121]: radviz(data, "Name"); 

## 绘图格式

设置绘图样式

从 1.5 版本开始,matplotlib 提供了一系列预配置的绘图样式。设置样式可用于轻松地给出所需的绘图外观。在创建绘图之前调用matplotlib.style.use(my_plot_style)即可设置样式。例如,您可以写matplotlib.style.use('ggplot')以获得 ggplot 风格的绘图。

您可以在matplotlib.style.available中看到各种可用的样式名称,并且很容易尝试它们。

一般绘图样式参数

大多数绘图方法都有一组关键字参数,用于控制返回绘图的布局和格式:

In [122]: plt.figure();
In [123]: ts.plot(style="k--", label="Series"); 

对于每种类型的图(例如 linebarscatter),将任何附加的参数关键字传递给相应的 matplotlib 函数(ax.plot()ax.bar()ax.scatter())。 这些可以用来控制额外的样式,超出了 pandas 提供的范围。

控制图例

您可以将 legend 参数设置为 False 以隐藏默认显示的图例。

In [124]: df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
In [125]: df = df.cumsum()
In [126]: df.plot(legend=False); 

控制标签

您可以设置 xlabelylabel 参数以为绘图设置自定义标签,用于 x 和 y 轴。 默认情况下,pandas 将采用索引名称作为 xlabel,同时将其留空作为 ylabel。

In [127]: df.plot();
In [128]: df.plot(xlabel="new x", ylabel="new y"); 

比例

你可以传递logy以获得对数刻度 Y 轴。

In [129]: ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
In [130]: ts = np.exp(ts.cumsum())
In [131]: ts.plot(logy=True); 

还请参阅 logxloglog 关键字参数。

在次要 y 轴上绘图

要在次要 y 轴上绘制数据,请使用 secondary_y 关键字:

In [132]: df["A"].plot();
In [133]: df["B"].plot(secondary_y=True, style="g"); 

要在 DataFrame 中绘制某些列,请将列名传递给 secondary_y 关键字:

In [134]: plt.figure();
In [135]: ax = df.plot(secondary_y=["A", "B"])
In [136]: ax.set_ylabel("CD scale");
In [137]: ax.right_ax.set_ylabel("AB scale"); 

请注意,在图例中,自动标记在次要 y 轴上绘制的列为“(right)” 。 要关闭自动标记,请使用 mark_right=False 关键字:

In [138]: plt.figure();
In [139]: df.plot(secondary_y=["A", "B"], mark_right=False); 

### 时间序列图的自定义格式化程序

pandas 为时间序列图提供了自定义格式化程序。 这些更改日期和时间的轴标签的格式。 默认情况下,自定义格式化程序仅应用于由 pandas 使用 DataFrame.plot()Series.plot() 创建的图。 要使它们应用于所有图,包括由 matplotlib 制作的图,请设置选项 pd.options.plotting.matplotlib.register_converters = True 或使用 pandas.plotting.register_matplotlib_converters()

抑制刻度分辨率调整

pandas 包括用于常规频率时间序列数据的自动刻度分辨率调整。对于 pandas 无法推断频率信息的有限情况(例如,在外部创建的twinx中),您可以选择抑制此行为以进行对齐。

这是默认行为,请注意 x 轴刻度标签的执行方式:

In [140]: plt.figure();
In [141]: df["A"].plot(); 

使用x_compat参数,您可以抑制此行为:

In [142]: plt.figure();
In [143]: df["A"].plot(x_compat=True); 

如果有多个需要抑制的图,可以在with语句中使用pandas.plotting.plot_params中的use方法:

In [144]: plt.figure();
In [145]: with pd.plotting.plot_params.use("x_compat", True):
 .....:    df["A"].plot(color="r")
 .....:    df["B"].plot(color="g")
 .....:    df["C"].plot(color="b")
 .....: 

自动日期刻度调整

TimedeltaIndex现在使用本机 matplotlib 刻度定位器方法,对于刻度标签重叠的图形,调用 matplotlib 的自动日期刻度调整非常有用。

有关更多信息,请参阅autofmt_xdate方法和matplotlib 文档

子图

DataFrame中的每个Series可以使用subplots关键字在不同的轴上绘制:

In [146]: df.plot(subplots=True, figsize=(6, 6)); 

使用布局并针对多个轴

子图的布局可以通过layout关键字指定。它可以接受(行数,列数)layout关键字也可以在histboxplot中使用。如果输入无效,将引发ValueError

layout指定的行 x 列包含的轴数必须大于所需子图的数量。如果layout可以容纳更多轴,那么空白轴将不会被绘制。类似于 NumPy 数组的reshape方法,您可以在一个维度上使用-1来自动计算所需的行数或列数,给定另一个维度。

In [147]: df.plot(subplots=True, layout=(2, 3), figsize=(6, 6), sharex=False); 

上面的示例与使用以下内容相同:

In [148]: df.plot(subplots=True, layout=(2, -1), figsize=(6, 6), sharex=False);

所需的列数(3)是从要绘制的系列数和给定的行数(2)推断出来的。

您可以通过ax关键字以类似列表的方式传递预先创建的多个轴。这允许更复杂的布局。传递的轴必须与正在绘制的子图数量相同。

当通过ax关键字传递多个轴时,layoutsharexsharey关键字不会影响输出。您应该明确传递sharex=Falsesharey=False,否则将会看到警告。

In [149]: fig, axes = plt.subplots(4, 4, figsize=(9, 9))
In [150]: plt.subplots_adjust(wspace=0.5, hspace=0.5)
In [151]: target1 = [axes[0][0], axes[1][1], axes[2][2], axes[3][3]]
In [152]: target2 = [axes[3][0], axes[2][1], axes[1][2], axes[0][3]]
In [153]: df.plot(subplots=True, ax=target1, legend=False, sharex=False, sharey=False);
In [154]: (-df).plot(subplots=True, ax=target2, legend=False, sharex=False, sharey=False); 

另一个选项是通过在Series.plot()中传递一个ax参数来在特定轴上绘制:

In [155]: np.random.seed(123456)
In [156]: ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
In [157]: ts = ts.cumsum()
In [158]: df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
In [159]: df = df.cumsum() 
In [160]: fig, axes = plt.subplots(nrows=2, ncols=2)
In [161]: plt.subplots_adjust(wspace=0.2, hspace=0.5)
In [162]: df["A"].plot(ax=axes[0, 0]);
In [163]: axes[0, 0].set_title("A");
In [164]: df["B"].plot(ax=axes[0, 1]);
In [165]: axes[0, 1].set_title("B");
In [166]: df["C"].plot(ax=axes[1, 0]);
In [167]: axes[1, 0].set_title("C");
In [168]: df["D"].plot(ax=axes[1, 1]);
In [169]: axes[1, 1].set_title("D"); 

### 带有误差条的绘图

DataFrame.plot()Series.plot() 中支持使用误差条绘图。

水平和垂直误差条可以分别通过 xerryerr 关键字参数传递给 plot()。误差值可以使用多种格式指定:

  • 作为与绘图的DataFrame 的列名匹配的误差的DataFrame 或字典,或与 Seriesname 属性匹配的误差。
  • 作为一个字符串,指示绘图的DataFrame 中哪些列包含误差值。
  • 作为原始值(listtuplenp.ndarray)。必须与绘图的DataFrame/Series 的长度相同。

下面是从原始数据轻松绘制组均值和标准差的一个示例。

# Generate the data
In [170]: ix3 = pd.MultiIndex.from_arrays(
 .....:    [
 .....:        ["a", "a", "a", "a", "a", "b", "b", "b", "b", "b"],
 .....:        ["foo", "foo", "foo", "bar", "bar", "foo", "foo", "bar", "bar", "bar"],
 .....:    ],
 .....:    names=["letter", "word"],
 .....: )
 .....: 
In [171]: df3 = pd.DataFrame(
 .....:    {
 .....:        "data1": [9, 3, 2, 4, 3, 2, 4, 6, 3, 2],
 .....:        "data2": [9, 6, 5, 7, 5, 4, 5, 6, 5, 1],
 .....:    },
 .....:    index=ix3,
 .....: )
 .....: 
# Group by index labels and take the means and standard deviations
# for each group
In [172]: gp3 = df3.groupby(level=("letter", "word"))
In [173]: means = gp3.mean()
In [174]: errors = gp3.std()
In [175]: means
Out[175]: 
 data1     data2
letter word 
a      bar   3.500000  6.000000
 foo   4.666667  6.666667
b      bar   3.666667  4.000000
 foo   3.000000  4.500000
In [176]: errors
Out[176]: 
 data1     data2
letter word 
a      bar   0.707107  1.414214
 foo   3.785939  2.081666
b      bar   2.081666  2.645751
 foo   1.414214  0.707107
# Plot
In [177]: fig, ax = plt.subplots()
In [178]: means.plot.bar(yerr=errors, ax=ax, capsize=4, rot=0); 

在这种情况下,也支持不对称误差条,但必须提供原始误差值。对于长度为NSeries,应提供一个 2xN 的数组,表示下限和上限(或左右)误差。对于 MxNDataFrame,不对称误差应该是一个 Mx2xN 的数组。

下面是使用不对称误差条绘制最小/最大范围的一个示例。

In [179]: mins = gp3.min()
In [180]: maxs = gp3.max()
# errors should be positive, and defined in the order of lower, upper
In [181]: errors = [[means[c] - mins[c], maxs[c] - means[c]] for c in df3.columns]
# Plot
In [182]: fig, ax = plt.subplots()
In [183]: means.plot.bar(yerr=errors, ax=ax, capsize=4, rot=0); 

### 绘制表格

使用 matplotlib 表格绘图现在支持在DataFrame.plot()Series.plot() 中使用 table 关键字。table 关键字可以接受 boolDataFrameSeries。绘制表格的简单方法是指定 table=True。数据将被转置以符合 matplotlib 的默认布局。

In [184]: np.random.seed(123456)
In [185]: fig, ax = plt.subplots(1, 1, figsize=(7, 6.5))
In [186]: df = pd.DataFrame(np.random.rand(5, 3), columns=["a", "b", "c"])
In [187]: ax.xaxis.tick_top()  # Display x-axis ticks on top.
In [188]: df.plot(table=True, ax=ax); 

此外,您可以传递不同的 DataFrameSeriestable 关键字。数据将按照 print 方法中显示的方式绘制(不会自动转置)。如果需要,应手动转置,如下面的示例所示。

In [189]: fig, ax = plt.subplots(1, 1, figsize=(7, 6.75))
In [190]: ax.xaxis.tick_top()  # Display x-axis ticks on top.
In [191]: df.plot(table=np.round(df.T, 2), ax=ax); 

还存在一个辅助函数 pandas.plotting.table,它从 DataFrameSeries 创建一个表,并将其添加到 matplotlib.Axes 实例中。此函数可以接受 matplotlib table 具有的关键字。

In [192]: from pandas.plotting import table
In [193]: fig, ax = plt.subplots(1, 1)
In [194]: table(ax, np.round(df.describe(), 2), loc="upper right", colWidths=[0.2, 0.2, 0.2]);
In [195]: df.plot(ax=ax, ylim=(0, 2), legend=None); 

注意:您可以使用 axes.tables 属性在轴上获取表实例,以进行进一步的装饰。有关更多信息,请参阅 matplotlib 表格文档。 ### 色图

绘制大量列时可能出现的一个潜在问题是,由于默认颜色中的重复,一些系列很难区分。为了解决这个问题,DataFrame 绘图支持使用 colormap 参数,该参数接受 Matplotlib colormap 或一个字符串,该字符串是注册到 Matplotlib 的 colormap 的名称。默认 matplotlib 色图的可视化参考 此处

由于 matplotlib 不直接支持基于线的图的色图,所以颜色是根据 DataFrame 中的列数确定的均匀间距选择的。没有考虑背景颜色,因此一些色图会产生不易看到的线。

要使用 cubehelix 色图,我们可以传递 colormap='cubehelix'

In [196]: np.random.seed(123456)
In [197]: df = pd.DataFrame(np.random.randn(1000, 10), index=ts.index)
In [198]: df = df.cumsum()
In [199]: plt.figure();
In [200]: df.plot(colormap="cubehelix"); 

或者,我们可以传递色图本身:

In [201]: from matplotlib import cm
In [202]: plt.figure();
In [203]: df.plot(colormap=cm.cubehelix); 

色图也可以用于其他绘图类型,如条形图:

In [204]: np.random.seed(123456)
In [205]: dd = pd.DataFrame(np.random.randn(10, 10)).map(abs)
In [206]: dd = dd.cumsum()
In [207]: plt.figure();
In [208]: dd.plot.bar(colormap="Greens"); 

平行坐标图:

In [209]: plt.figure();
In [210]: parallel_coordinates(data, "Name", colormap="gist_rainbow"); 

Andrews 曲线图:

In [211]: plt.figure();
In [212]: andrews_curves(data, "Name", colormap="winter"); 

直接使用 Matplotlib 绘图

在某些情况下,直接使用 matplotlib 准备图形可能仍然更可取或必要,例如当 pandas 尚不支持某种类型的图形或自定义时。SeriesDataFrame对象的行为类似于数组,因此可以直接将它们传递给 matplotlib 函数,而无需显式转换。

pandas 还自动注册了识别日期索引的格式化程序和定位器,从而将日期和时间支持扩展到几乎所有 matplotlib 中可用的绘图类型。尽管这种格式化不提供通过 pandas 绘图时获得的相同精细度水平,但在绘制大量点时可能更快。

In [213]: np.random.seed(123456)
In [214]: price = pd.Series(
 .....:    np.random.randn(150).cumsum(),
 .....:    index=pd.date_range("2000-1-1", periods=150, freq="B"),
 .....: )
 .....: 
In [215]: ma = price.rolling(20).mean()
In [216]: mstd = price.rolling(20).std()
In [217]: plt.figure();
In [218]: plt.plot(price.index, price, "k");
In [219]: plt.plot(ma.index, ma, "b");
In [220]: plt.fill_between(mstd.index, ma - 2 * mstd, ma + 2 * mstd, color="b", alpha=0.2); 

绘图后端

pandas 可以通过第三方绘图后端进行扩展。主要思想是让用户选择一个基于 Matplotlib 提供的绘图后端不同的绘图后端。

这可以通过在plot函数中将‘backend.module’作为参数backend传递来实现。例如:

>>> Series([1, 2, 3]).plot(backend="backend.module") 

或者,您也���以全局设置此选项,这样您就不需要在每个plot调用中指定关键字。例如:

>>> pd.set_option("plotting.backend", "backend.module")
>>> pd.Series([1, 2, 3]).plot() 

或者:

>>> pd.options.plotting.backend = "backend.module"
>>> pd.Series([1, 2, 3]).plot() 

这基本上等同于:

>>> import backend.module
>>> backend.module.plot(pd.Series([1, 2, 3])) 

然后,后端模块可以使用其他可视化工具(Bokeh、Altair、hvplot 等)生成图形。一些为 pandas 实现后端的库列在生态系统页面上。

开发人员指南可以在pandas.pydata.org/docs/dev/development/extending.html#plotting-backends找到

基本绘图:plot

我们将演示基础知识,有关一些高级策略,请参见食谱。

Series 和 DataFrame 上的plot方法只是对plt.plot()的简单包装:

In [3]: np.random.seed(123456)
In [4]: ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
In [5]: ts = ts.cumsum()
In [6]: ts.plot(); 

如果索引由日期组成,则调用gcf().autofmt_xdate()尝试根据上述格式化 x 轴。

在 DataFrame 上,plot()是一个方便的方法,用于绘制所有带有标签的列:

In [7]: df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))
In [8]: df = df.cumsum()
In [9]: plt.figure();
In [10]: df.plot(); 

您可以使用plot()中的xy关键字绘制一列与另一列的图形:

In [11]: df3 = pd.DataFrame(np.random.randn(1000, 2), columns=["B", "C"]).cumsum()
In [12]: df3["A"] = pd.Series(list(range(len(df))))
In [13]: df3.plot(x="A", y="B"); 

注意

要了解更多格式和样式选项,请参见下面的格式化。

Pandas 2.2 中文官方教程和指南(十八)(3)https://developer.aliyun.com/article/1509793

相关文章
|
3天前
|
SQL 数据采集 数据挖掘
Pandas 教程
10月更文挑战第25天
10 2
|
3月前
|
存储 JSON 数据格式
Pandas 使用教程 CSV - CSV 转 JSON
Pandas 使用教程 CSV - CSV 转 JSON
33 0
|
3月前
|
JSON 数据格式 Python
Pandas 使用教程 JSON
Pandas 使用教程 JSON
39 0
|
3月前
|
SQL 数据采集 JSON
Pandas 使用教程 Series、DataFrame
Pandas 使用教程 Series、DataFrame
54 0
|
5月前
|
数据采集 存储 数据可视化
Pandas高级教程:数据清洗、转换与分析
Pandas是Python的数据分析库,提供Series和DataFrame数据结构及数据分析工具,便于数据清洗、转换和分析。本教程涵盖Pandas在数据清洗(如缺失值、重复值和异常值处理)、转换(数据类型转换和重塑)和分析(如描述性统计、分组聚合和可视化)的应用。通过学习Pandas,用户能更高效地处理和理解数据,为数据分析任务打下基础。
571 3
|
6月前
|
索引 Python
Pandas 2.2 中文官方教程和指南(一)(4)
Pandas 2.2 中文官方教程和指南(一)
55 0
|
6月前
|
存储 SQL JSON
Pandas 2.2 中文官方教程和指南(一)(3)
Pandas 2.2 中文官方教程和指南(一)
91 0
|
6月前
|
XML 关系型数据库 PostgreSQL
Pandas 2.2 中文官方教程和指南(一)(2)
Pandas 2.2 中文官方教程和指南(一)
164 0
|
6月前
|
XML 关系型数据库 MySQL
Pandas 2.2 中文官方教程和指南(一)(1)
Pandas 2.2 中文官方教程和指南(一)
162 0
|
6月前
|
C++ 索引 Python
Pandas 2.2 中文官方教程和指南(五)(4)
Pandas 2.2 中文官方教程和指南(五)
45 0