【问题标题】:Plotting dot plot with enough space of ticks in Python/matplotlib?在 Python/matplotlib 中绘制具有足够刻度空间的点图?
【发布时间】:2013-11-25 14:46:48
【问题描述】:

在下面的代码sn-p中:

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 都没有足够的空间,因此很难注意到 cyl48变量在图中输出其值。

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

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

【问题讨论】:

  • 我通常会根据我的输入大小调整刻度,让生活更轻松。
  • 您可以添加问题的图像吗? (值得一提的是,刻度间距会根据输入值自动调整。不过,您已经手动将它们设置为其他值。)
  • 还是我误解了您的要求?您是否要求在情节边缘有更多空间?如果您想模仿 R 的行为,请使用 ax.margins(0.04),它会在自动缩放之前在数据限制周围添加 4% 的填充。

标签: python matplotlib pandas


【解决方案1】:

我不知道你在问什么......

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

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

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

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

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()

【讨论】:

  • 对不起,我想知道这两个。非常感谢您的精彩说明。
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2015-05-13
  • 1970-01-01
相关资源
最近更新 更多