2

在以下代码片段中:

import numpy as np
import pandas as pd
import pandas.rpy.common as com
import matplotlib.pyplot as plt
mtcars = com.load_data("mtcars")
df = mtcars.groupby(["cyl"]).apply(lambda x: pd.Series([x["cyl"].count(), np.mean(x["wt"])], index=["n", "wt"])).reset_index()
plt.plot(df["n"], range(len(df["cyl"])), "o")
plt.yticks(range(len(df["cyl"])), df["cyl"])
plt.show()

此代码输出点图图形,但结果看起来很糟糕,因为 xticks 和 yticks 都没有足够的空间,因此很难同时注意到4变量在图中输出其值8cyl

那么我怎样才能提前有足够的空间来绘制它,就像你可以在 R/ggplot2 中没有任何麻烦一样呢?

供您参考,这两个代码都不适用于我的情况。有人知道原因吗?我是否必须首先费心创建这样的子图?是否无法根据输入值自动调整刻度?

4

1 回答 1

3

我不太清楚你在问什么...

您是在问为什么不自动定位刻度,还是在问如何在绘图的内边缘周围添加“填充”?

如果是前者,那是因为您手动设置了刻度位置yticks。这会覆盖自动刻度定位器。

如果是后者,请使用ax.margins(some_percentage)(其中 some_percentage 介于 0 和 1 之间,例如0.055%)在数据限制被自动缩放之前添加“填充”。

作为后者的一个例子,默认情况下,数据限制可以自动缩放,使得一个点可以位于绘图边界上。例如:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10), 'ro')
plt.show()

在此处输入图像描述

如果您想避免这种情况,请使用ax.margins(或等效地,plt.margins)指定在自动缩放发生之前要添加到数据限制的填充百分比。

例如

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(10), 'ro')
ax.margins(0.04) # 4% padding, similar to R.
plt.show()

在此处输入图像描述

于 2013-11-13T16:26:30.197 回答