gpt4 book ai didi

python - 非数字数据的散点图

转载 作者:行者123 更新时间:2023-11-28 18:42:02 25 4
gpt4 key购买 nike

我正在学习将 matplotlib 与 pandas 一起使用,但遇到了一些麻烦。有一个数据框,分别以地区和咖啡店作为其 y 和 x 标签。列值代表各个地区咖啡店的开始日期

          starbucks    cafe-cool      barista   ........    60 shops
dist1 2008-09-18 2010-05-04 2007-02-21 ...............
dist2 2007-06-12 2011-02-17
dist3
.
.
100 districts

我想绘制一个散点图,x 轴为时间序列,y 轴为咖啡店。由于我无法找出直接的单行方式来绘制此图,因此我将咖啡店提取为一个列表,将日期提取为另一个列表。

shops = list(df.columns.values)
dt = pd.DataFrame(df.ix['dist1'])
dates = dt.set_index('dist1')

首先我尝试了 plt.plot(dates, shops)。得到一个 ZeroDivisionError: integer division or modulo by zero - 错误。我想不通这是为什么。我在一些帖子上看到数据应该是数字,所以我使用了 ytick 函数。

y = [1, 2, 3, 4, 5, 6,...60] 

仍然 plt.plot(dates, y) 抛出相同的 ZeroDivisionError。如果我能克服这个问题,我就可以使用刻度函数进行绘图。来源 - http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html

我正在尝试仅为第一行/dist1 绘制图表。为此,我将第一行作为数据帧 df1 = df.ix[1] 获取,然后使用以下内容

for badges, dates in df.iteritems():

date = dates

ax.plot_date(date, yval)

# Record the number and label of the coffee shop
label_ticks.append(yval)
label_list.append(badges)
yval+=1

.我在 ax.plot_date(date, yval) 行出错,说 x 和 y 应该具有相同的第一维。因为我正在为 dist1 的每个咖啡店一个一个地绘制,所以 x 和 y 的长度不应该总是一个吗? PS:date是一个datetime.date对象

最佳答案

为此,您需要将日期转换为日期时间,请参阅 here为了一个例子。如前所述,您还需要将咖啡店改造成然后一些编号系统相应地更改刻度标签。

尝试一下

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

def get_datetime(string):
"Converts string '2008-05-04' to datetime"
return datetime.strptime(string, "%Y-%m-%d")

# Generate datarame
df = pd.DataFrame(dict(
starbucks=["2008-09-18", "2007-06-12"],
cafe_cool=["2010-05-04", "2011-02-17"],
barista=["2007-02-21"]),
index=["dist1", "dist2"])

ax = plt.subplot(111)

label_list = []
label_ticks = []
yval = 1 # numbering system

# Iterate through coffee shops
for coffee_shop, dates in df.iteritems():

# Convert strings into datetime list
datetimes = [get_datetime(date) for date in dates]

# Create list of yvals [yval, yval, ...] to plot against
yval_list = np.zeros(len(dates))+yval

ax.plot_date(datetimes, yval_list)

# Record the number and label of the coffee shop
label_ticks.append(yval)
label_list.append(coffee_shop)

yval+=1 # Change the number so they don't all sit at the same y position

# Now set the yticks appropriately
ax.set_yticks(label_ticks)
ax.set_yticklabels(label_list)

# Set the limits so we can see everything
ax.set_ylim(ax.get_ylim()[0]-1,
ax.get_ylim()[1]+1)

关于python - 非数字数据的散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113726/

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