gpt4 book ai didi

python - 如何将数据框每一行的观察结果绘制为线图

转载 作者:行者123 更新时间:2023-12-04 07:15:42 25 4
gpt4 key购买 nike

我想在一张图中显示多个数据集。
但我似乎无法让 y 轴工作并得到以下错误:ValueError: x 和 y must have same first dimension, but have shape (2,) and (6060000,)
由于我仍然是初学者并且我从不同来源复制了部分代码,因此我的代码很可能在某些地方非常糟糕。
我从来没有问过任何 Pandas /matplotlib 问题,所以我希望这是可重现的。
数据框有很多列,但代码示例中只提供了一小部分。
enter image description here

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd

channel_data = pd.DataFrame({'Creation date': ['2014-01-02', '2013-09-11', '2007-08-19'], 'Subscriber count': [6060000, 4110000, 4440000 ]})

# get x and y from first channel
now = str(dt.datetime.now())
now = now[:10]

dates = [channel_data["Creation date"][0], now]
dates2 = [channel_data["Creation date"][1], now]
dates3 = [channel_data["Creation date"][2], now]
x1 = [dt.datetime.strptime(d,'%Y-%m-%d').date() for d in dates]
x2 = [dt.datetime.strptime(d,'%Y-%m-%d').date() for d in dates2]
x3 = [dt.datetime.strptime(d,'%Y-%m-%d').date() for d in dates3]

# PROBLEM HERE

y1 = range(len(x1)) # i got the x axis to work but am having problems with this part
y2 = range(len(x2))
y3 = range(len(x3))

#y1 = range(0, channel_data["Subscriber count"][0])
# this was my idea of displaying the data (y-axis)
# -----------------------------------------------------------

plt.figure(figsize=(10, 5))
plt.title("Channel growth over time [USD]", fontdict={"fontweight": "bold"})


plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y'))

plt.plot(x1, y1, "b.-", label="Carwow") #b.- to choose color=blue, pointer=. , line=normal line
plt.plot(x2, y2, "r.-", label="Doug Demuro")
plt.plot(x3, y3, "g.-", label="Scotty Kilmer")

plt.xlabel("Date", fontdict={"fontsize": 13})
plt.ylabel("Subscribers", fontdict={"fontsize": 12})

plt.legend()

plt.show()
enter image description here
enter image description here
第一张图显示了当前图形(y 值错误)。
第二张图片显示了我想要如何显示数据的 scetch。
我知道这一次有很多问题要问,但也许只是有一个我可以去的想法或方向。尝试了一堆东西,但没有任何效果。
感谢您的阅读。

最佳答案

  • 请注意,这不是可视化增长率的正确方法。该图意味着线性增长,因为您只是在两点之间绘制一条线。增长率应根据其他日期的中间计数确定。
  • 错误发生在 plt.plot(x1, y1,...) , 因为 x1是长度 d in dates (这是 2),但是 y1长度为 6060000。
  • 使用 pandas.DataFrame.iterrows 迭代并绘制每个观察结果。
  • 每个listxy情节由2个值组成
  • x总是从创建日期开始,到 now 结束
  • y总是从 0 开始,到订阅者计数
  • 结束


    import pandas as pd
    import matplotlib.pyplot as plt

    # crate a dataframe
    df = pd.DataFrame({'Creation date': ['2014-01-02', '2013-09-11', '2007-08-19'], 'Subscriber count': [6060000, 4110000, 4440000], 'Channel name': ['Carwow', 'Doug Demuro', 'Scotty Kilmer']})

    # convert any date columns to a datetime dtype
    df['Creation date'] = pd.to_datetime(df['Creation date']).dt.date

    # display(df)
    Creation date Subscriber count Channel name
    0 2014-01-02 6060000 Carwow
    1 2013-09-11 4110000 Doug Demuro
    2 2007-08-19 4440000 Scotty Kilmer

    # get the current datetime date
    now = datetime.now().date()

    # iterate through the rows and plot
    for i, v in df.iterrows():

    # get the values and labels to plot
    x0 = v['Creation date']
    y1 = v['Subscriber count']
    label = v['Channel name']

    plt.plot([x0, now], [0, y1], label=label)

    plt.legend()
    enter image description here

    关于python - 如何将数据框每一行的观察结果绘制为线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68779074/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com