如何获得给定轴的绘图类型?

时间:2017-10-29 20:23:25

标签: python pandas numpy matplotlib

我使用pandas.tools.plotting.scatter_matrix()来获取直方图和散点图的矩阵。

xlim

如果它是散点图,我想迭代每个Axes实例并更改其ylimlim_range = (0, recent_grads[['Women', 'Men']].max().max()) @np.vectorize def set_lims(ax): # check if ax is a scatter plot ax.set_xlim((lim_range)) ax.set_ylim((lim_range))

.jsx

有没有办法获得Axes的情节类型?在这种情况下,我知道散点图在索引1和2中,但我想避免检查索引。

1 个答案:

答案 0 :(得分:1)

没有 Axes 的情节类型。轴可以在其中具有任意图,例如您可以在同一轴上绘制图像,散点图和等高线图。

你可以检查轴内是否有一个集合,对于一个scatter_matrix图,这意味着它是一个散点图,

import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import scatter_matrix
import numpy as np

df = pd.DataFrame(np.random.randn(1000, 4), columns=['a', 'b', 'c', 'd'])

axes = scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal='hist')

lim_range = (-7, 7)
for ax in axes.flat:
    if len(ax.collections) > 0:
        ax.set_xlim(lim_range)
        ax.set_ylim(lim_range)

plt.show()

这样做的缺点是第一个y轴和最后一个x轴将保持不变,因为它们不包含散点图。 因此,你需要改变所有绘图的xticks(只是把它放在检查之外。第一个y轴的yticks会更复杂。你需要从其他轴上取下它们并重新调整刻度。

import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import scatter_matrix
import numpy as np

df = pd.DataFrame(np.random.randn(1000, 4), columns=['a', 'b', 'c', 'd'])

axes = scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal='hist')

lim_range = (-7, 7)
for ax in axes.flat:
    ax.set_xlim(lim_range)
    if len(ax.collections) > 0:
        ax.set_ylim(lim_range)

lim1 = axes[0][1].get_xlim()
locs = axes[0][1].yaxis.get_majorticklocs()
locs = locs[(lim1[0] <= locs) & (locs <= lim1[1])]
adj = (locs - lim1[0]) / (lim1[1] - lim1[0])

lim0 = axes[0][0].get_ylim()
adj = adj * (lim0[1] - lim0[0]) + lim0[0]
axes[0][0].yaxis.set_ticks(adj)

if np.all(locs == locs.astype(int)):
    # if all ticks are int
    locs = locs.astype(int)
axes[0][0].yaxis.set_ticklabels(locs)

plt.show()

enter image description here