在以下代码段中:
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
和8
cyl
变量在图表中输出其值。
那么我怎样才能提前用足够的空间绘制它,就像你在R / ggplot2中没有任何麻烦一样可以做到这一点?
对于您的信息,this code和this都不适用于我的情况。谁知道原因?我是否一定要先创建这样的子图?是否无法根据输入值自动调整刻度?
答案 0 :(得分:3)
我不能完全说出你在问什么...
您是在问为什么刻度线没有自动定位,或者您是否询问如何在绘图的内边缘周围添加“填充”?
如果是前者,那是因为您使用yticks
手动设置了刻度线位置。这会覆盖自动刻度定位器。
如果是后者,请使用ax.margins(some_percentage)
(其中some_percentage介于0和1之间,例如0.05
为5%),以便在自动缩放之前将“填充”添加到数据限制。
作为后者的一个例子,默认情况下,数据限制可以自动调整,使得一个点可以位于图的边界上。 E.g:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(range(10), 'ro')
plt.show()
如果要避免这种情况,请使用ax.margins
(或等效地,plt.margins
)指定在自动缩放之前添加到数据限制的填充百分比。
E.g。
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()