我有一个DataFrame包含日内价格/数量的数据:
time price volume
2015-04-15 10:10:00 10 500
2015-04-15 10:20:00 15 100
2015-04-15 10:30:00 20 70
2015-04-15 10:30:00 etc etc
Run Code Online (Sandbox Code Playgroud)
我需要得到一个标准价格 - 交易量表,其中顶部图表包含价格(常规线),底部图表包含交易量(条形图).
当然,两个图表应该共享同一个轴.
到目前为止,我想出了:
plt.figure(figsize=(20,15))
ax1=plt.subplot2grid((2,2),(0,0),colspan=2)
ax2=plt.subplot2grid((2,2),(1,0),colspan=2)
ax2.xaxis.set_major_locator(HourLocator(interval=3))
ax2.xaxis.set_major_formatter(DateFormatter('%H:%M'))
data.ix['2015-10-01': '2015-10-02','price'].plot(ax=ax1)
data.ix['2015-10-01': '2015-10-02','volume'].plot(ax=ax2, kind='bar')
Run Code Online (Sandbox Code Playgroud)
但是我为条形图获得了超密集的刻度标签(图表无法使用).
我怎样才能简单地指定每小时有一个小刻度,每3小时有一个主要刻度(这样图表仍然可读)?
我有非常相似的代码来绘制:
plt.plot(df_tags[df_tags.detailed_tag == tag]['week'], df_tags[df_tags.detailed_tag == tag].tonality)
Run Code Online (Sandbox Code Playgroud)
但我想这样只保留 x 轴的最小值和最大值:
plt.plot(df_tags[df_tags.detailed_tag == tag]['week'], df_tags[df_tags.detailed_tag == tag].tonality)
plt.xticks([df_tags['week'].min(), df_tags['week'].max()])
print (df_tags['week'].min(), df_tags['week'].max())
Run Code Online (Sandbox Code Playgroud)
我正在尝试对数据进行一些分析。我得到了 csv 文件,并将其转换为 Pandas 数据帧。数据看起来像这样。它有几列,但我试图将 x 轴绘制为日期列。.
熊猫数据框看起来像这样
print (df.head(10)
cus-id date value_limit
0 10173 2011-06-12 455
1 95062 2011-09-11 455
2 171081 2011-07-05 212
3 122867 2011-08-18 123
4 107186 2011-11-23 334
5 171085 2011-09-02 376
6 169767 2011-07-03 34
7 80170 2011-03-23 34
8 154178 2011-10-02 34
9 3494 2011-01-01 34
Run Code Online (Sandbox Code Playgroud)
我正在尝试绘制日期数据,因为同一日期有多个值。为此,我试图将 x 坐标刻度绘制为日期。因为日期列中的最小日期是 2011-01-01,最大日期是 2012-04-20。
我试过这样的事情
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import matplotlib.dates as mdates
df = pd.read_csv('rio_data.csv', …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用matplotlib和pandas库绘制一个相当小的数据集。数据集的格式是CSV文件。这是数据集:
DATE,UNRATE
1948-01-01,3.4
1948-02-01,3.8
1948-03-01,4.0
1948-04-01,3.9
1948-05-01,3.5
1948-06-01,3.6
1948-07-01,3.6
1948-08-01,3.9
1948-09-01,3.8
1948-10-01,3.7
1948-11-01,3.8
1948-12-01,4.0
Run Code Online (Sandbox Code Playgroud)
我使用pandas加载了数据集(可以看到,保存该数据集的文件名为“ dataset.csv”):
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('dataset.csv')
dataset['DATE'] = pd.to_datetime(dataset['DATE'])
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用matplotlib绘制加载的数据集:
plt.plot(dataset['DATE'], dataset['UNRATE'])
plt.show()
Run Code Online (Sandbox Code Playgroud)
上面的代码通常可以正常工作,并显示以下图形:
但是,问题是我想要在x轴上显示的数据似乎只是以两个间隔绘制:
我发现了一个问题,要在matplotlib中更改x或y轴上的“刻度频率”吗?,这确实与我的问题有关。但是,从我的测试来看,似乎只能使用整数值。
我还发现了这个问题,控制了pyplot中的x ticks数量,这似乎为我的问题提供了解决方案。答案说的使用to_pydatetime的方法是的方法DatetimeIndex。由于我的理解是默认情况下pandas.to_datetime会返回a DatetimeIndex,因此我可以to_pydatetime在上使用dataset['DATE']:
plt.xticks(dataset['DATE'].to_pydatetime())
Run Code Online (Sandbox Code Playgroud)
但是,我改为收到错误:
AttributeError: 'Series' object has no attribute 'to_pydatetime'
Run Code Online (Sandbox Code Playgroud)
由于这似乎只是默认行为,有没有办法强迫matplotlib沿x轴绘制每个点,而不是简单地绘制其他每个点?
我想将刻度之间的空间设置为自定义距离而不是自动生成。我想实现这个图在 y 轴上的作用。https://pasteboard.co/H0XUbpq.jpg
我找到了如何设置自定义刻度的方法,但是轴上的间距仍然相同,然后大多数刻度仍然彼此靠近。所以我希望刻度间隔与 y 轴上刻度之间的空间不同,就像我上面链接的图表一样。
是否可以移动 x 和 y 轴标签编号,例如 +2 ?例如,我创建了此图像,但我希望标签编号以 2 开头:
我的代码是:
jacaardMatrix = 1.662887377173091485e-01 3.432835820895522305e-01 3.568320278503046006e-01
5.065963060686015651e-02 3.160270880361173984e-01 3.374888691006233121e-01
3.093987157034442520e-02 1.802120141342756221e-01 1.748178980228928259e-01
fig2=plt.figure()
plt.title("Radius and FRC Jacaard Values for Scoring System: "+str(i))
plt.xlabel('Radius')
plt.ylabel('FRC Size')
plt.imshow(jacaardMatrix)
Run Code Online (Sandbox Code Playgroud) 我有三个数据框df1,df2和df3。我将它们合并到一个数据帧df中。现在,我想在数据框中找到每个日期的最小值,5%,25%,中位数,90%和最大值,并将其绘制(每个日期的线图),其中X轴具有百分位数,Y轴具有值。
df1
date value
0 2017-11-06 10.20
1 2017-11-06 40.20
2 2017-11-06 35.10
3 2017-11-06 90.45
4 2017-11-06 60.23
df2
date value
1 2017-11-07 110.20
2 2017-11-07 500.26
3 2017-11-07 200.16
4 2017-11-07 350.01
5 2017-11-07 89.20
df3
date value
1 2017-11-08 101.45
2 2017-11-08 160.34
3 2017-11-08 41.54
4 2017-11-08 192.42
5 2017-11-08 111.12
df
date value
0 2017-11-06 10.20
1 2017-11-06 40.20
2 2017-11-06 35.10
3 2017-11-06 90.45
4 2017-11-06 60.23
5 2017-11-07 110.20
6 2017-11-07 500.26
7 …Run Code Online (Sandbox Code Playgroud)