[英]Matplotlib to set the frequency on xaxis
我想使用以下代码设置图表 x 轴的频率:
fig, ax = plt.subplots()
fig = plt.figure(figsize=(4,3))
plt.plot(vol['BTC'], 'b-', vol['ETH'], 'r-', vol['XRP'], 'g-', vol['BCH'], 'y-')
plt.legend(labels= ['BTC','ETH','XRP','BCH'], fontsize="xx-small")
plt.xticks(rotation=30, horizontalalignment='right')
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 20))
plt.rcParams.update({'font.size': 3})
但是,没有任何变化,当标签重叠时,它仍然像大量墨水。 我想降低显示频率并减小标签的大小。 任何帮助,将不胜感激。
编辑:我尝试了以下但图表是空的。
My new code:
years = mdates.YearLocator() # every year
months = mdates.MonthLocator() # every month
days = mdates.DayLocator() # every day
years_fmt = mdates.DateFormatter('%Y-%m-%d')
vol_index = vol.index
fig, ax = plt.subplots()
ax.plot(np.array(vol.index), np.array(vol['BTC']))
# format the ticks
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(years_fmt)
ax.xaxis.set_minor_locator(days)
# round to nearest years.
datemin = pd.to_datetime(np.datetime64(vol.index[0], 'D')).strftime('%Y-%m-%d')
datemax = pd.to_datetime(np.datetime64(vol.index[-1], 'D') + np.timedelta64(1, 'D')).strftime('%Y-%m-%d')
ax.set_xlim(datemin, datemax)
# format the coords message box
ax.format_xdata = mdates.DateFormatter('%Y-%m-%d')
ax.format_ydata = lambda x: '$%1.2f' % x # format the price.
ax.grid(True)
fig.autofmt_xdate()
此代码使用以下输入:
np.array(vol['BTC'])
:
[0.05498711 0.03454131 0.03454131 0.02293731 0.02191053 0.02191053
0.01688648 0.02828462 0.02828462 0.02828462 0.03188105 0.03054535
0.02955679 0.0270898 0.0281818 0.02866918 0.02710031 0.02668099
0.03404319 0.03670357 0.05311734 0.08663729 0.08663729 0.08339912
0.08831546 0.08063601 0.07522458 0.06043395 0.06280006 0.06543079
0.06543079 0.0444152 0.0444152 0.03575803 0.03575803 0.03575803
0.02870328 0.02870328 0.02870328 0.02870328 0.02835626 0.02263508
0.02263508 0.02514882 0.0332816 0.02463769 0.0385677 0.0427951
0.04329788 0.04329788 0.04329788 0.05240083 0.05883257 0.05883257
0.03162634 0.02906886 0.02765406 0.024522 0.02352016 0.01756594
0.02030382 0.02030382 0.03326152 0.03601441 0.03601441 0.03250479
0.04571088 0.06313575 0.07639834 0.07639834 0.0555884 0.05133794
0.0493664 0.03279575 0.05379169 0.05431873 0.05431873 0.04422756
0.04649411 0.04825915 0.04584981 0.02741382 0.02741382]
vol.index
:
Index(['2019-11-01 23:59:08', '2019-11-02 23:59:08', '2019-11-03 23:59:04',
'2019-11-04 23:59:12', '2019-11-05 23:59:03', '2019-11-06 23:59:08',
'2019-11-07 23:59:04', '2019-11-08 23:59:07', '2019-11-09 23:59:06',
'2019-11-10 23:59:05', '2019-11-11 23:59:03', '2019-11-12 23:59:04',
'2019-11-13 23:59:06', '2019-11-14 23:59:06', '2019-11-15 23:59:05',
'2019-11-16 23:59:12', '2019-11-17 23:59:03', '2019-11-18 23:59:10',
'2019-11-19 23:59:09', '2019-11-20 23:59:06', '2019-11-21 23:59:11',
'2019-11-22 23:59:05', '2019-11-23 23:59:06', '2019-11-24 23:59:09',
'2019-11-25 23:59:05', '2019-11-26 23:59:03', '2019-11-27 23:59:04',
'2019-11-28 23:59:05', '2019-11-29 23:59:04', '2019-11-30 23:59:02',
'2019-12-01 23:59:06', '2019-12-02 23:59:11', '2019-12-03 23:59:02',
'2019-12-04 23:59:07', '2019-12-05 23:59:07', '2019-12-06 23:59:08',
'2019-12-07 23:59:07', '2019-12-08 23:59:06', '2019-12-09 23:59:06',
'2019-12-10 23:59:06', '2019-12-11 23:59:11', '2019-12-12 23:59:05',
'2019-12-13 23:59:04', '2019-12-14 23:59:08', '2019-12-15 23:59:07',
'2019-12-16 23:59:13', '2019-12-17 23:59:10', '2019-12-18 23:59:12',
'2019-12-19 23:59:09', '2019-12-20 23:59:10', '2019-12-21 23:59:06',
'2019-12-22 23:59:07', '2019-12-23 23:59:07', '2019-12-24 23:59:13',
'2019-12-25 23:59:10', '2019-12-26 23:59:11', '2019-12-27 23:59:04',
'2019-12-28 23:59:05', '2019-12-29 23:59:06', '2019-12-30 23:59:07',
'2019-12-31 23:59:09', '2020-01-01 23:59:06', '2020-01-02 23:59:02',
'2020-01-03 23:59:06', '2020-01-04 23:59:03', '2020-01-05 23:59:08',
'2020-01-06 23:59:07', '2020-01-07 23:59:08', '2020-01-08 23:59:06',
'2020-01-09 23:59:03', '2020-01-10 23:59:10', '2020-01-11 23:59:02',
'2020-01-12 23:59:07', '2020-01-13 23:59:04', '2020-01-14 23:59:07',
'2020-01-15 23:59:04', '2020-01-16 23:59:06', '2020-01-17 23:59:03',
'2020-01-18 23:59:09', '2020-01-19 23:59:04', '2020-01-20 23:59:04',
'2020-01-21 23:59:08', '2020-01-22 23:59:04'],
dtype='object', name='timestamp')
vol
:
BTC ETH XRP BCH
timestamp
2019-11-01 23:59:08 0.054987 0.040244 0.029715 0.082026
2019-11-02 23:59:08 0.034541 0.029485 0.026469 0.078933
2019-11-03 23:59:04 0.034541 0.027006 0.026571 0.057731
2019-11-04 23:59:12 0.022937 0.027006 0.026571 0.052057
2019-11-05 23:59:03 0.021911 0.026792 0.023252 0.040931
... ... ... ... ...
2020-01-18 23:59:09 0.046494 0.086220 0.066950 0.162209
2020-01-19 23:59:04 0.048259 0.084283 0.066950 0.157251
2020-01-20 23:59:04 0.045850 0.081700 0.064228 0.149919
2020-01-21 23:59:08 0.027414 0.041858 0.042955 0.092721
2020-01-22 23:59:04 0.027414 0.041858 0.042955 0.092721
你需要一个刻度定位器:
import matplotlib.ticker as ticker
# ...
ax.xaxis.set_major_locator(ticker.MultipleLocator(20))
如果你愿意,你可以这样做,而不是修改 rcParams:
ax.tick_params(axis='x',which='major',labelsize=3)
这是另一种方法,您可以在其中指定所需的滴答数而不是频率,但您可能仍然会发现它很有用:
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange('2017-01', '2020-01', dtype='datetime64[D]')
y = np.random.random(len(x))
df = pd.DataFrame({'x': x, 'y': y})
plt.scatter(df['x'].values, df['y'].values)
ticks = np.arange(x[0], x[-1], (x[-1] - x[0]).astype('timedelta64[D]') / 15)
plt.xticks(ticks, ticks)
plt.gca().tick_params('x', labelrotation=45, labelsize=10)
plt.show()
这使
代替
这是一个使用给定数据的完整示例,
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
BTC = np.array([0.05498711,0.03454131,0.03454131,0.02293731,0.02191053,0.02191053,
0.01688648,0.02828462,0.02828462,0.02828462,0.03188105,0.03054535,
0.02955679,0.0270898, 0.0281818, 0.02866918,0.02710031,0.02668099,
0.03404319,0.03670357,0.05311734,0.08663729,0.08663729,0.08339912,
0.08831546,0.08063601,0.07522458,0.06043395,0.06280006,0.06543079,
0.06543079,0.0444152, 0.0444152, 0.03575803,0.03575803,0.03575803,
0.02870328,0.02870328,0.02870328,0.02870328,0.02835626,0.02263508,
0.02263508,0.02514882,0.0332816, 0.02463769,0.0385677, 0.0427951,
0.04329788,0.04329788,0.04329788,0.05240083,0.05883257,0.05883257,
0.03162634,0.02906886,0.02765406,0.024522, 0.02352016,0.01756594,
0.02030382,0.02030382,0.03326152,0.03601441,0.03601441,0.03250479,
0.04571088,0.06313575,0.07639834,0.07639834,0.0555884, 0.05133794,
0.0493664, 0.03279575,0.05379169,0.05431873,0.05431873,0.04422756,
0.04649411,0.04825915,0.04584981,0.02741382,0.02741382])
idx = np.array(['2019-11-01 23:59:08', '2019-11-02 23:59:08', '2019-11-03 23:59:04',
'2019-11-04 23:59:12', '2019-11-05 23:59:03', '2019-11-06 23:59:08',
'2019-11-07 23:59:04', '2019-11-08 23:59:07', '2019-11-09 23:59:06',
'2019-11-10 23:59:05', '2019-11-11 23:59:03', '2019-11-12 23:59:04',
'2019-11-13 23:59:06', '2019-11-14 23:59:06', '2019-11-15 23:59:05',
'2019-11-16 23:59:12', '2019-11-17 23:59:03', '2019-11-18 23:59:10',
'2019-11-19 23:59:09', '2019-11-20 23:59:06', '2019-11-21 23:59:11',
'2019-11-22 23:59:05', '2019-11-23 23:59:06', '2019-11-24 23:59:09',
'2019-11-25 23:59:05', '2019-11-26 23:59:03', '2019-11-27 23:59:04',
'2019-11-28 23:59:05', '2019-11-29 23:59:04', '2019-11-30 23:59:02',
'2019-12-01 23:59:06', '2019-12-02 23:59:11', '2019-12-03 23:59:02',
'2019-12-04 23:59:07', '2019-12-05 23:59:07', '2019-12-06 23:59:08',
'2019-12-07 23:59:07', '2019-12-08 23:59:06', '2019-12-09 23:59:06',
'2019-12-10 23:59:06', '2019-12-11 23:59:11', '2019-12-12 23:59:05',
'2019-12-13 23:59:04', '2019-12-14 23:59:08', '2019-12-15 23:59:07',
'2019-12-16 23:59:13', '2019-12-17 23:59:10', '2019-12-18 23:59:12',
'2019-12-19 23:59:09', '2019-12-20 23:59:10', '2019-12-21 23:59:06',
'2019-12-22 23:59:07', '2019-12-23 23:59:07', '2019-12-24 23:59:13',
'2019-12-25 23:59:10', '2019-12-26 23:59:11', '2019-12-27 23:59:04',
'2019-12-28 23:59:05', '2019-12-29 23:59:06', '2019-12-30 23:59:07',
'2019-12-31 23:59:09', '2020-01-01 23:59:06', '2020-01-02 23:59:02',
'2020-01-03 23:59:06', '2020-01-04 23:59:03', '2020-01-05 23:59:08',
'2020-01-06 23:59:07', '2020-01-07 23:59:08', '2020-01-08 23:59:06',
'2020-01-09 23:59:03', '2020-01-10 23:59:10', '2020-01-11 23:59:02',
'2020-01-12 23:59:07', '2020-01-13 23:59:04', '2020-01-14 23:59:07',
'2020-01-15 23:59:04', '2020-01-16 23:59:06', '2020-01-17 23:59:03',
'2020-01-18 23:59:09', '2020-01-19 23:59:04', '2020-01-20 23:59:04',
'2020-01-21 23:59:08', '2020-01-22 23:59:04'], dtype='datetime64[s]')
df = pd.DataFrame({'BTC': BTC})
df.index = pd.DatetimeIndex(idx)
x = df.index.values.astype('datetime64[D]')
y = df['BTC']
plt.figure(figsize=(8,4))
plt.plot(x, y)
ticks = np.arange(x[0], x[-1], (x[-1] - x[0]).astype('timedelta64[D]') / 15)
plt.xticks(ticks, ticks)
plt.gca().tick_params('x', labelrotation=90, labelsize=10)
plt.show()
这会给你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.