【问题标题】:How to separate points in the x axis graphic with matplotlib?如何用matplotlib分隔x轴图中的点?
【发布时间】:2021-03-05 00:36:23
【问题描述】:

我正在学习使用 Python,作为家庭作业,我们应该阅读与 Covid-19 数据相关的 CSV 文件。

import pandas as pd
import matplotlib.pyplot as plt

def graficarUnPais (data, pais):
    x1 = []
    y1 = []
    x2 = []
    y2 = []

    for record in data:
        if (record['location'] == pais):
            if ((not (mt.isnan(record['total_cases'])))):
                x1.append(record['date'])
                y1.append(record['total_cases'])
            if ((not (mt.isnan(record['total_deaths'])))):
                x2.append(record['date'])
                y2.append(record['total_deaths'])

    plt.title("Casos y Muertes Totales")
    plt.xlabel('Día')
    plt.ylabel('Casos')
    plt.plot(x1, y1, label='Casos Totales')
    plt.plot(x2, y2, label='Muertes Totales')
    plt.xticks(rotation=90)
    plt.legend()
    plt.show()

archivo = pd.read_csv('full_data.csv')
data_list = archivo.to_dict("list")
data_records = archivo.to_dict("records")

paises = 'Argentina'
graficarUnPais(data_records, pais)

所以图形是正确的,但是我不喜欢这种格式,日期都被打乱了。我想知道是否有办法将所有 x 轴点分开一点。顺便说一句,我正在使用 PyCharm。

不知道有没有办法放水平滚动条之类的东西

这是图形的图片:

【问题讨论】:

    标签: python matplotlib pycharm


    【解决方案1】:

    有很多选项,包括将要显示的值设置为 xtick 数组(参见例如 Changing the "tick frequency" on x or y axis in matplotlib?)。在您的情况下,您可以简单地使用,

    skip = 5
    plt.xticks(x1[::skip]))
    

    注意我假设x1=x2。但是,正确的做法可能是使用简洁的数据格式化功能,

    https://matplotlib.org/3.1.0/gallery/ticks_and_spines/date_concise_formatter.html

    编辑:如果您真的希望滑块专注于整体,您可以执行以下操作,

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.widgets import Slider
    import matplotlib.dates as mdates
    import datetime as dt
    
    
    window = 20
    
    fig, ax = plt.subplots()
    fig.subplots_adjust(bottom=0.25)
    
    #Generating dates using https://stackoverflow.com/questions/9627686/plotting-dates-on-the-x-axis-with-pythons-matplotlib
    N = 100
    y = np.random.rand(N)
    now = dt.datetime.now()
    then = now + dt.timedelta(days=100)
    days = mdates.drange(now,then,dt.timedelta(days=1))
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
    ax.xaxis.set_major_locator(mdates.DayLocator(interval=5))
    ax.plot(days, y)
    
    
    axshow = plt.axes([0.25, 0.1, 0.65, 0.03])
    s = Slider(axshow, 'Range', 0, N, valinit=0, valstep=1)
    
    
    def update(val):
        ax.set_xlim(days[int(val)],days[int(val)+window])
    
    s.on_changed(update)
    fig.show()
    

    这让您可以使用滑块进行选择,

    【讨论】:

    • 好的,我想我明白了,你是说我应该在轴上只显示一些点,而不是全部。但我想要的是能够将它们全部显示出来并使图形更大,并且能够向右和向左滚动以便更清晰。我尝试了 figsize 但它不起作用
    • 我已经编辑让你这样做。您可以只使用 matploltib 窗口提供的缩放和滚动工具
    • 好的,现在编辑我可以做我想做的事情了,非常感谢,它对我有用!
    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2014-10-30
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多