利用
N=30
line_chart.x_labels_major = dates[::N]
可以解决X轴每隔30天显示一次输出
有没有方法可以代替这个代码,每一个月显示一次输出呢?
如:2014-1-1,2014-2-1,2014-3-1以此类推
如图
另外,在此输出之前,定义:
current_date = row[0]x轴显示的是2014-1-1
current_date = datetime.strptime(row[0], "%Y-%m-%d")x轴显示的是2014-1-1 00:00:00,这个是什么回事呢?这个00:00:00后缀能不显示吗?
如图2
1.x轴只显示每个月1号
在遍历json文件内容的时候,加上个判断,把每个月1号的值放入1个列表里
if btc_dict['date'][-2:]=='01' :
first_day.append(btc_dict['date'])
画折现图的时候,显示x轴刻度那句代码改成: line_chart.x_labels_major = first_day
2.2014-1-1 00:00:00的问题。创建图表的时候,x轴没有说必须要把字符串转化为日期对象啊,可以是字符串。直接取出来复到一个列表里,把列表赋给line_chart.x_labels就可以了。
import pygal
import json
filename = 'btc_close_2017.json'
with open(filename) as f:
btc_data = json.load(f)
dates = []
months = []
weeks = []
weekdays = []
close = []
first_day = []
for btc_dict in btc_data:
if btc_dict['date'][-2:]=='01' :
first_day.append(btc_dict['date'])
dates.append(btc_dict['date'])
months.append(int(btc_dict['month']))
weeks.append(int(btc_dict['week']))
weekdays.append(btc_dict['weekday'])
close.append(int(float(btc_dict['close'])))
print("{} is month {} week {}, {}, the close price is {} RMB".format(btc_dict['date'],btc_dict['month'],btc_dict['week'],btc_dict['weekday'],btc_dict['close']))
print
line_chart = pygal.Line(x_label_rotation=20,show_minor_x_labels=False)
line_chart.title = '显示每月1日的收盘价¥'
line_chart.x_labels = dates
#N = 20 #每隔20天显示一个x坐标
line_chart.x_labels_major = first_day
line_chart.add('收盘价',close)
line_chart.render_to_file('显示每月1日的收盘价.svg')