当前位置: 首页 > 知识库问答 >
问题:

在matplotlib中使用3个图在x轴上对齐/旋转文本标签

危璞
2023-03-14

如何将文本标签与图中的x标记对齐?我正在使用主机。设置标签(标签,rotation='vertical'),但这似乎不起作用。我的标签是句子,有些可能比其他的小/大,比如“木乃伊归来第2部分”-我如何在x轴下方填充一个空间来容纳这个?

from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

path='/home/project/df.csv'
df=pd.read_csv(path,sep=',',header='infer')
xs =range(0,101)
ys =list(df['B'].ix[0:100])
zs=list(df['C'].ix[0:100])
ws=list(df['D'].ix[0:100])

if 1:
    host = host_subplot(111, axes_class=AA.Axes)
    p1, = host.plot(xs, ys, label='B')
    plt.subplots_adjust(right=0.75)

    par1 = host.twinx()
    par2 = host.twinx()

    offset = 60
    new_fixed_axis = par2.get_grid_helper().new_fixed_axis
    par2.axis["right"] = new_fixed_axis(loc="right",
                                        axes=par2,
                                        offset=(offset, 0))

    par2.axis["right"].toggle(all=True)
    host.set_xlim(min(xs), max(xs))
    host.set_ylim(100, max(ys))

    host.set_xlabel("A")
    host.set_ylabel("B")
    par1.set_ylabel("C")
    par2.set_ylabel("D")

    p2, = par1.plot(xs, ws, label='C',color='red')
    p3, = par2.plot(xs, zs, label='D',color='green')
    for tl in par1.get_yticklabels():
        tl.set_color('red')
    for tl in par2.get_yticklabels():
        tl.set_color('green')



    for tl in par1.get_yticklabels():
        tl.set_color('r')
    for tl in par2.get_yticklabels():
        tl.set_color('g')
    host.legend()

    host.axis["left"].label.set_color(p1.get_color())
    par1.axis["right"].label.set_color(p2.get_color())
    par2.axis["right"].label.set_color(p3.get_color())
    start, end, stepsize=0,len(df)-1,3
    host.xaxis.set_ticks(np.arange(start, end, stepsize))
    labels=list(df['A'])[0::stepsize]
    host.set_xticklabels(labels,rotation='vertical')
    plt.tight_layout()
    plt.draw()
    plt.show()

我需要对齐图中的“黑色”体量。

我尝试了这里的例子中的建议python旋转值在xax上不重叠-plt.xticks(x,标签,旋转='垂直'),等等,但没有工作。

编辑-:从Kazemakaze下面的反馈中,我尝试了以下方法-: f,host=plt.subplots()#host=host_subplot(111,axes_class=AA。斧头),但我也必须适应其余的代码。你能提供一个双轴的例子吗?

我正在使用twinx()使代码适应这个次轴:如何添加到图例?现在可以旋转了,不过在次轴上需要一些指针。

共有1个答案

翁翰
2023-03-14

下面是我如何解决它的-不旋转的问题确实存在于host\u子地块中,并且在使用plt时它工作正常。子批次

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

path='/home/project/df.csv'
df=pd.read_csv(path,sep=',',header='infer')
xs =range(0,101)
ys =list(df['B'].ix[0:100])
zs=list(df['C'].ix[0:100])
ws=list(df['D'].ix[0:100])


def make_patch_spines_invisible(ax):
    ax.set_frame_on(True)
    ax.patch.set_visible(False)
    for sp in ax.spines.itervalues():
        sp.set_visible(False)


def three_way_plot(xs,ys,ws,zs,category):
    fig, host = plt.subplots()
    fig.subplots_adjust(right=0.6)
    par1 = host.twinx()
    par2 = host.twinx()
    par2.spines["right"].set_position(("axes", 1.1))
    p1, = host.plot(xs, ys, "blue", linewidth=2.0, label="B")
    p2, = par1.plot(xs, ws, "r-", label="C")
    p3, = par2.plot(xs, zs, "g-", label="D")
    host.set_xlim(min(xs), max(xs))
    host.set_ylim(min(ys), max(ys) + 200)
    par1.set_ylim(min(ws), max(ws) + 200)
    par2.set_ylim(min(zs), max(zs))
    host.set_xlabel("A", fontsize=14)
    host.set_ylabel("B", fontsize=14)
    par1.set_ylabel("C", fontsize=14)
    par2.set_ylabel("D", fontsize=14)
    host.yaxis.label.set_color(p1.get_color())
    par1.yaxis.label.set_color(p2.get_color())
    par2.yaxis.label.set_color(p3.get_color())
    lines = [p1, p2, p3]
    labels = ["mary had a little lamb","The mummy returns","Die another day","Welcome back"]*25
    start, end, step_size = 0, len(df) - 1, 4
    host.set_xticks(np.arange(start, end, step_size))
    host.set_xticklabels(labels, rotation='vertical', fontsize=10)
    host.legend(lines, [l.get_label() for l in lines])
    plt.tight_layout()
    plt.show()


three_way_plot(xs,ys,ws,zs,"category")

当然,我屏蔽了数据的True标签。

 类似资料:
  • 我不知道如何在X轴上旋转文本。这是一个时间戳,所以随着样本数量的增加,它们越来越接近,直到它们重叠。我想将文本旋转90度,这样随着样本越来越近,它们就不会重叠。 下面是我所拥有的,它工作正常,除了我不知道如何旋转X轴文本。

  • 我试图让x轴标签在柱状图上旋转45度,但没有成功。这是我下面的代码:

  • 我正在使用MPAndroidChart在我的android项目中绘制折线图,我看到X轴上的标签没有正确对齐,如下图所示。 未对齐标签

  • 我的x轴值没有对齐。我应该修改什么设置? x轴未对齐 下面是我到目前为止在代码中使用的。setLabelsToSkip将无法工作,因为我使用的是3.0.1版。 这是我的标签格式化程序类: 以下是我的主要活动setdata方法: 在我的主要活动中,我像这样使用它:

  • 我使用的是图表.js版本 3。我需要在堆叠条形图的 y 轴上左对齐标签。如何实现这一点?

  • 我有一个简单的因子图 问题是x标签都在一起运行,使它们无法读取。如何旋转文本以使标签可读?