繁体   English   中英

如何调整 x 轴的大小并使其与 y 轴不同 Matplotlib

[英]How to resize the x-axis and make it different from the y-axis Matplotlib

我正在使用 Python 中的 ElementTree、Pandas 和 Matplotlib 模块进行以下开发:

    def extract_name_value(signals_df):
        #print(signals_df)
        names_list = [name for name in signals_df['Name'].unique()]
        num_names_list = len(names_list)

        colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k']

        # Creation Graphic
        fig = plt.figure(figsize=(18, 20))
        plt.suptitle(f'File PXML: {rootXML}', fontsize=20, fontweight='bold', color='SteelBlue', position=(0.75, 0.90))
        fig.tight_layout()
        i = 1
        for name in names_list:
            # get data
            data = signals_df[signals_df["Name"] == name]["Value"]
            datax = signals_df["Name"]
            # x = [n for n in range(len(data))]
            x = [n for n in range(len(datax))]
            print(x)
            # get color
            j = random.randint(0, len(colors) - 1)
            # add subplots
            ax = plt.subplot(num_names_list, 1, i)
            ax.plot(x, data, drawstyle='steps', marker='o', color=colors[j], linewidth=3)
            # plt.xticks(None)
            ax.set_ylabel(name, fontsize=12, fontweight='bold', color='SteelBlue', rotation=50, labelpad=45)
            ax.grid(alpha=0.4)
            i += 1

        plt.show()

我收到以下错误: 错误图像

我一直在寻找错误,我完全理解 x 和 y 的尺寸必须相等,但是有可能制作 x 轴大于 y 轴的图形? 并且 x 轴来自与 y 轴无关的变量? 这会怎样?

x 轴是它在 xml 文件的 Signal 元素中的所有值的计数:我把它放在这里是因为它有多广泛并且这个值大于 y 轴,但是如何考虑这 3 个值我从 xml 中带来的,它们是信号名称,信号值作为 y 轴,信号计数作为 x 轴。 我非常感谢您的意见和帮助。

IIUC,您正在尝试按照 XML 文件中的出现顺序 (X-index) 绘制多个阶梯值。 然后您应该针对原始数据框的 X 值进行绘图。 我没有对您的代码进行太多更改,只是稍微修复了一些样式。

import xml.etree.ElementTree as ET
import pandas as pd
from matplotlib import pyplot as plt
import random

file_xml = 'example_un_child4.xml'

def transfor_data_atri(rootXML):
    file_xml = ET.parse(rootXML)
    data_XML = [
        {"Name": signal.attrib["Name"],
         "Value": int(signal.attrib["Value"].split(' ')[0])
         } for signal in file_xml.findall(".//Signal")
    ]
    
    signals_df = pd.DataFrame(data_XML)
    extract_name_value(signals_df)
    
def extract_name_value(signals_df):
    #print(signals_df)
    names_list = [name for name in signals_df['Name'].unique()]
    num_names_list = len(names_list)

    colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k']

    # Creation Graphic
    #fig = plt.figure(figsize=(18, 20), sharex=True)
    fig, ax = plt.subplots(nrows=num_names_list, figsize=(10, 15), sharex=True)
    plt.suptitle(f'File PXML: {file_xml}', fontsize=20, fontweight='bold', color='SteelBlue', position=(0.75, 0.90))
    #fig.tight_layout()
    i = 1
    for pos, name in enumerate(names_list):
        # get data
        data = signals_df[signals_df["Name"] == name]["Value"]
        datax = signals_df["Name"]
        # x = [n for n in range(len(data))]
        #x = [n for n in range(len(datax))]
        #print(x)
        # get color
        j = random.randint(0, len(colors) - 1)
        # add subplots
        #ax[pos] = plt.subplot(num_names_list, 1, i)
        ax[pos].plot(data.index, data, drawstyle='steps', marker='o', color=colors[j], linewidth=3)
        # plt.xticks(None)
        ax[pos].set_ylabel(name, fontsize=12, fontweight='bold', color='SteelBlue', rotation=50, labelpad=45)
        ax[pos].grid(alpha=0.4)
        i += 1
    fig.tight_layout()
    plt.show()

transfor_data_atri(file_xml)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM