matplotlib 旋转轴标签

bksxznpy  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(100)

我有一个图,看起来像这样(这是著名的Wine数据集):

正如您所看到的,x轴标签重叠,因此需要旋转。

**NB!**我对旋转x-ticks不感兴趣(如here所解释的),但标签文本,即alcoholmalic_acid

创建情节的逻辑如下:我使用axd = fig.subplot_mosaic(...)创建了一个网格,然后为底部的图设置了axd[...].set_xlabel("something")标签。如果set_xlabel接受一个rotation参数,那就太好了,但不幸的是,情况并非如此。

sy5wg1nm

sy5wg1nm1#

基于documentationset_xlabel接受文本参数,其中rotation是一个。
不过,我用来测试的示例如下所示。

import matplotlib.pyplot as plt
import numpy as np

plt.plot()
plt.gca().set_xlabel('Test', rotation='vertical')
y1aodyip

y1aodyip2#

1.有几种方法可以与单个Axes进行交互。
1.遍历所有这些:for ax in axes.flat:
1.遍历其中的一个切片:for ax in axes.flat[-4:]:最后四个。
1.选择要在axes = axes.flat之后处理的特定Axesax[4]ax[-1]

导入和示例DataFrame

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# sinusoidal sample data
sample_length = range(1, 16+1)
rads = np.arange(0, 2*np.pi, 0.01)
data = np.array([np.sin(t*rads) for t in sample_length])

# create a wide dataframe
df = pd.DataFrame(data.T, index=pd.Series(rads.tolist(), name='radians'), columns=[f'freq: {i}x' for i in sample_length])

# transform df to a long form
dfl = df.melt(ignore_index=False).reset_index()

pandas.DataFrame.plot搭配subplots=True

axes = df.plot(subplots=True, layout=(4, 4), figsize=(10, 10), color='tab:purple', legend=False)

# flatten the axes array
axes = axes.flatten()

# iterate through each axes and associated column
for ax, col in zip(axes, df.columns):
    
    # set the axes title
    ax.set_title(col)
    
    # extract the existing xaxis label
    xlabel = ax.get_xlabel()
    
    # set the xaxis label with rotation
    ax.set_xlabel(xlabel, rotation='vertical')

plt.subplots

fig, axes = plt.subplots(4, 4, figsize=(10, 10), sharex=True, tight_layout=True)

axes = axes.flat

for ax, col in zip(axes, df.columns):

    df.plot(y=col, ax=ax, title=col, legend=False)
    xlabel = ax.get_xlabel()
    ax.set_xlabel(xlabel, rotation='vertical')

seaborn.relplot

  • relplot是一个图形级别的函数,它返回一个FacetGrid,从该FacetGrid中使用axes = g.axes提取子图。
g = sns.relplot(data=dfl, kind='line', x='radians', y='value', col='variable', col_wrap=4, height=2.3)

axes = g.axes.ravel()

for ax in axes[-4:]:
    xlabel = ax.get_xlabel()
    ax.set_xlabel(xlabel, rotation='vertical')

DataFrmames

df.head()

freq: 1x  freq: 2x  freq: 3x  freq: 4x  freq: 5x  freq: 6x  freq: 7x  freq: 8x  freq: 9x  freq: 10x  freq: 11x  freq: 12x  freq: 13x  freq: 14x  freq: 15x  freq: 16x
radians                                                                                                                                                                       
0.00     0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   0.000000
0.01     0.010000  0.019999  0.029996  0.039989  0.049979  0.059964  0.069943  0.079915  0.089879   0.099833   0.109778   0.119712   0.129634   0.139543   0.149438   0.159318
0.02     0.019999  0.039989  0.059964  0.079915  0.099833  0.119712  0.139543  0.159318  0.179030   0.198669   0.218230   0.237703   0.257081   0.276356   0.295520   0.314567
0.03     0.029996  0.059964  0.089879  0.119712  0.149438  0.179030  0.208460  0.237703  0.266731   0.295520   0.324043   0.352274   0.380188   0.407760   0.434966   0.461779
0.04     0.039989  0.079915  0.119712  0.159318  0.198669  0.237703  0.276356  0.314567  0.352274   0.389418   0.425939   0.461779   0.496880   0.531186   0.564642   0.597195

dfl.head()

radians  variable     value
0     0.00  freq: 1x  0.000000
1     0.01  freq: 1x  0.010000
2     0.02  freq: 1x  0.019999
3     0.03  freq: 1x  0.029996
4     0.04  freq: 1x  0.039989

相关问题