# parasite addition axes, share x ax_1 = ParasiteAxes(ax_cof, sharex=ax_cof) ax_1.set_ylabel('deal count') # ax_2 = ParasiteAxes(ax_cof, sharex=ax_cof) # ax_2.set_ylabel('average area') ax_cof.axis['right'].set_visible(False) ax_cof.axis['top'].set_visible(False) # ax_cof.set_ylim(2.8, 3.2) # append axes ax_cof.parasites.append(ax_1) # ax_cof.parasites.append(ax_2) ax1_axisline = ax_1.get_grid_helper().new_fixed_axis # ax2_axisline = ax_2.get_grid_helper().new_fixed_axis ax_1.axis['right2'] = ax1_axisline(loc='right', axes=ax_1, offset=(0, 0)) ax_1.axis['right2'].line.set_color('red') ax_1.axis['right2'].label.set_color('red') ax_1.axis['right2'].major_ticks.set_color('red') ax_1.axis['right2'].major_ticklabels.set_color('red') # ax_2.axis['right'] = ax2_axisline(loc='right', axes=ax_2, offset=(80, 0)) # ax_2.axis['right'].line.set_color('orange') # ax_2.axis['right'].label.set_color('orange') # ax_2.axis['right'].major_ticks.set_color('orange') # ax_2.axis['right'].major_ticklabels.set_color('orange') fig.add_axes(ax_cof)
#invisible right axis of ax_cof ax_cof.axis['right'].set_visible(False) ax_cof.axis['top'].set_visible(False) ax_temp.axis['right'].set_visible(True) ax_temp.axis['right'].major_ticklabels.set_visible(True) ax_temp.axis['right'].label.set_visible(True) #set label for axis ax_cof.set_ylabel('cof') ax_cof.set_xlabel('Distance (m)') ax_temp.set_ylabel('Temperature') ax_load.set_ylabel('load') ax_cp.set_ylabel('CP') ax_wear.set_ylabel('Wear') load_axisline = ax_load.get_grid_helper().new_fixed_axis cp_axisline = ax_cp.get_grid_helper().new_fixed_axis wear_axisline = ax_wear.get_grid_helper().new_fixed_axis ax_load.axis['right2'] = load_axisline(loc='right', axes=ax_load, offset=(40, 0)) ax_cp.axis['right3'] = cp_axisline(loc='right', axes=ax_cp, offset=(80, 0)) ax_wear.axis['right4'] = wear_axisline(loc='right', axes=ax_wear, offset=(120, 0)) fig.add_axes(ax_cof) ''' #set limit of x, y ax_cof.set_xlim(0,2) ax_cof.set_ylim(0,3)
ax_data.axis['right'].set_visible(False) ax_data.axis['top'].set_visible(False) ax_cpu.axis['right'].set_visible(True) ax_cpu.axis['right'].major_ticklabels.set_visible(True) ax_cpu.axis['right'].label.set_visible(True) #set label for axis ax_data.set_ylabel('data') ax_data.set_xlabel('time (s)') ax_cpu.set_ylabel('cpu') ax_mem.set_ylabel('memory') #ax_bitrates.set_ylabel('bitrates') #ax_wear.set_ylabel('Wear') #new axsi line load_axisline = ax_mem.get_grid_helper().new_fixed_axis #cp_axisline = ax_bitrates.get_grid_helper().new_fixed_axis #wear_axisline = ax_wear.get_grid_helper().new_fixed_axis #axsi line padding on the right ax_mem.axis['right2'] = load_axisline(loc='right', axes=ax_mem, offset=(40, 0)) #ax_bitrates.axis['right3'] = cp_axisline(loc='right', axes=ax_bitrates, offset=(80,0)) #ax_wear.axis['right4'] = wear_axisline(loc='right', axes=ax_wear, offset=(120,0)) #add host axes to fig fig.add_axes(ax_data) #plot fig#################################### #curve_data, = ax_data.plot(times, data, label="data", color='green') width = 0.9 curve_data = ax_data.bar(range(len(times)),
host.parasites.append(par1) host.parasites.append(par2) host.set_ylabel("Density") host.set_xlabel("Distance") host.axis["right"].set_visible(False) par1.axis["right"].set_visible(True) par1.set_ylabel("Temperature") par1.axis["right"].major_ticklabels.set_visible(True) par1.axis["right"].label.set_visible(True) par2.set_ylabel("Velocity") offset = (60, 0) new_axisline = par2.get_grid_helper().new_fixed_axis par2.axis["right2"] = new_axisline(loc="right", axes=par2, offset=offset) fig.add_axes(host) host.set_xlim(0, 2) host.set_ylim(0, 2) host.set_xlabel("Distance") host.set_ylabel("Density") par1.set_ylabel("Temperature") p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density") p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature") p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity")
def draw_city(city): select = "SELECT so2, no2, co, time_point FROM day_data WHERE cityname='" + city + "'" + "AND time_point Between '2019-02-01' AND '2019-03-01'" cur.execute(select) all_data = cur.fetchall() # 防止查不到数据 if len(all_data) != 0: # 准备数据 so2 = [] no2 = [] co = [] time_point = [] # 准备标签 for data in all_data: so2.append(int(data[0])) no2.append(int(data[1])) co.append(float(data[2])) time_point.append(str(data[3])) # 准备字体 my_font = fm.FontProperties( fname="F:\\Project\\Environment\\web\\php\\font\\simsun.ttc") fontcn = {'family': 'SimSun', 'size': 10} # 绘制气温变化 fig = plt.figure(figsize=(40, 8), dpi=80) ax_so2 = HostAxes( fig, [0, 0, 0.9, 0.9 ]) # 用[left, bottom, weight, height]的方式定义axes,0 <= l,b,w,h <= 1 # parasite addtional axes, share x ax_no2 = ParasiteAxes(ax_so2, sharex=ax_so2) ax_co = ParasiteAxes(ax_so2, sharex=ax_so2) ax_so2.parasites.append(ax_no2) ax_so2.parasites.append(ax_co) # invisible right axis of ax_so2 ax_so2.axis['right'].set_visible(False) ax_so2.axis['top'].set_visible(False) ax_no2.axis['right'].set_visible(True) ax_no2.axis['right'].major_ticklabels.set_visible(True) ax_no2.axis['right'].label.set_visible(True) # set label for axis ax_so2.set_ylabel("so2 μg/m3", fontdict=fontcn) ax_so2.set_xlabel("时间", fontdict=fontcn) ax_no2.set_ylabel("no2 μg/m3", fontdict=fontcn) ax_co.set_ylabel("CO mg/m3", fontdict=fontcn) co_axisline = ax_co.get_grid_helper().new_fixed_axis ax_co.axis['right2'] = co_axisline(loc='right', axes=ax_co, offset=(40, 0)) fig.add_axes(ax_so2) x1 = time_point x2 = [i for i in range(0, len(x1))] y1 = so2 y2 = no2 y3 = co ax_so2.plot(x1, y1, label='so2', color='#009966') ax_no2.plot(x2, y2, label='no2', color='#FFDE33') ax_co.plot(x2, y3, label='co', color='#FF9933') ax_so2.legend() ax_no2.axis['right'].label.set_color('#FFDE33') ax_co.axis['right2'].label.set_color('#FF9933') ax_no2.axis['right'].major_ticks.set_color('#FFDE33') ax_co.axis['right2'].major_ticks.set_color('#FF9933') ax_no2.axis['right'].major_ticklabels.set_color('#FFDE33') ax_co.axis['right2'].major_ticklabels.set_color('#FF9933') ax_no2.axis['right'].line.set_color('#FFDE33') ax_co.axis['right2'].line.set_color('#FF9933') # 添加图形标题 plt.title(city + '日二氧化硫、二氧化氮、一氧化碳浓度变化情况', loc='center', fontproperties=my_font) # 保存图片 plt.savefig("./../../article/image/pollution/" + city + ".png", bbox_inches='tight') # 显示图形 # show ann img plt.cla() # clear fig to show ann img saved_img = plt.imread("./../../article/image/pollution/" + city + ".png") # keep the origin image size dpi = 80.0 height, width, depth = saved_img.shape plt.figure(figsize=(width / dpi, height / dpi)) plt.axis('off') plt.imshow(saved_img) plt.show()
def plot_multi_y(line_series_list, line_label_list, scatter_series_list, scatter_label_list): """ 第一条line做主轴,散点与主轴共用Y轴 :param line_series_list: :param line_label_list: :param scatter_series_list: :param scatter_label_list: :return: """ color_list = ['red', 'green', 'blue', 'yellow', 'pink', 'black', 'orange'] fig = plt.figure(1) host_axes = HostAxes(fig, [0.1, 0.1, 0.6, 0.8]) fig.add_axes(host_axes) host_axes.set_ylabel(line_label_list[0]) host_axes.axis['right'].set_visible(False) host_axes.set_ylim( min(line_series_list[0][1]) * 0.9, max(line_series_list[0][1]) * 1.1) host_axes.plot(line_series_list[0][0], line_series_list[0][1], label=line_label_list[0], color=color_list[0]) label_offset = 0 # line_axes = [] for i in range(len(line_series_list) - 1): axes = ParasiteAxes(host_axes, sharex=host_axes) axes.set_ylabel(line_label_list[i + 1]) axis_line = axes.get_grid_helper().new_fixed_axis axes.axis['right' + str(label_offset)] = axis_line( loc='right', axes=axes, offset=(label_offset, 0)) axes.axis['right' + str(label_offset)].label.set_color(color_list[i + 1]) axes.axis['right' + str(label_offset)].major_ticks.set_color( color_list[i + 1]) axes.axis['right' + str(label_offset)].major_ticklabels.set_color( color_list[i + 1]) axes.axis['right' + str(label_offset)].line.set_color(color_list[i + 1]) label_offset += 40 axes.set_ylim( min(line_series_list[i + 1][1]) * 0.9, max(line_series_list[i + 1][1]) * 1.1) axes.plot(line_series_list[i + 1][0], line_series_list[i + 1][1], label=line_label_list[i + 1], color=color_list[i + 1]) # line_axes.append(axes) host_axes.parasites.append(axes) # scatter_axes = [] for i in range(len(scatter_series_list)): # 与主轴共用Y轴 # axes = ParasiteAxes(host_axes, sharex=host_axes) # axes.set_ylabel(scatter_label_list[i]) # axis_line = axes.get_grid_helper().new_fixed_axis # axes.axis['right' + str(label_offset)] = axis_line(loc='right', axes=axes, offset=(label_offset, 0)) color_item = color_list[len(line_label_list) + i + 1] # axes.axis['right' + str(label_offset)].label.set_color(color_item) # axes.axis['right' + str(label_offset)].major_ticks.set_color(color_item) # axes.axis['right' + str(label_offset)].major_ticklabels.set_color(color_item) # axes.axis['right' + str(label_offset)].line.set_color(color_item) # label_offset += 40 # axes.set_ylim(min(scatter_series_list[i][1]), max(scatter_series_list[i][1])) host_axes.scatter(scatter_series_list[i][0], scatter_series_list[i][1], label=scatter_label_list[i], color=color_item) # scatter_axes.append(axes) # host_axes.parasites.append(axes) host_axes.legend() plt.show()
def dym_quantile(n): """ 动态分位图 当前投资已5年内历史数据计算百分位,价格合适购入 """ # 这里的计算按一年244个交易日计算 windows = int(n * 244) # 将时间取整数 start_date = dt.datetime(2006, 1, 1) end_date = dt.datetime(2020, 4, 1) df = dp.load_bar_data('000300', 'XSHG', start_date=start_date, end_data=end_date) df_finance = dp.load_finance_data('000300.XSHG', start_date=start_date, end_date=end_date) if len(df) == len(df_finance): print('yes!!!, len:%s' % len(df)) df['pe'] = df_finance['pe'] df['quantile'] = df_finance['pe'].rolling(windows).apply(lambda x: pd.Series(x).rank().iloc[-1] / pd.Series(x).shape[0], raw=True) # df['date'] = pd.to_datetime(df['date']) # 转换时间类型 # df.set_index(['date'], inplace=True) # df.index.name = None # 去掉索引列名 df.dropna(inplace=True) # 画出适中估值区间 # plt.figure() # 创建第一个画板 fig = plt.figure(figsize=(16, 9)) host = HostAxes(fig, [0.15, 0.1, 0.65, 0.8]) par1 = ParasiteAxes(host, sharex=host) par2 = ParasiteAxes(host, sharex=host) host.parasites.append(par1) host.parasites.append(par2) host.set_xlabel('Date') host.set_ylabel('Close') host.axis['right'].set_visible(False) par1.axis['right'].set_visible(True) par1.set_ylabel('%sY Rolling quantile' % n) par1.axis['right'].major_ticklabels.set_visible(True) par1.axis['right'].label.set_visible(True) par2.set_ylabel('PE') new_axisline = par2.get_grid_helper().new_fixed_axis # "_grid_helper"与"get_grid_helper()"等价,可以代替 par2.axis['right2'] = new_axisline(loc='right', axes=par2, offset=(45, 0)) fig.add_axes(host) df['date'] = pd.to_datetime(df['date']) df['date'] = df['date'].apply(lambda x: dates.date2num(x)) p1, = host.plot(df['date'], df['close'], label="Close") p2, = par1.plot(df['date'], df['quantile'], label="Quantile") p3, = par2.plot(df['date'], df['pe'], label="PE") host.legend() # 轴名称,刻度值的颜色 host.axis['left'].label.set_color(p1.get_color()) host.xaxis.set_major_locator(ticker.MaxNLocator(math.floor(len(df) / 100))) host.xaxis.set_major_formatter(dates.DateFormatter('%Y-%m')) par1.axis['right'].label.set_color(p2.get_color()) par2.axis['right2'].label.set_color(p3.get_color()) par2.axis['right2'].major_ticklabels.set_color(p3.get_color()) # 刻度值颜色 par2.axis['right2'].set_axisline_style('-|>', size=1.5) # 轴的形状色 par2.axis['right2'].line.set_color(p3.get_color()) # 轴的颜色 # ax.xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d')) # df[['quantile', 'close']].plot(secondary_y=['quantile'], figsize=(14, 10), alpha=.8) # plt.fill_between(df.index, y1=0.4, y2=0.6, color='blue', alpha=0.7) # plt.fill_between(df.index, y1=0.8, y2=1, color='red', alpha=0.7) # plt.fill_between(df.index, y1=0.0, y2=0.2, color='green', alpha=0.7) # plt.annotate('reasonable zone', (df.index[-1], 0.5)) # 画出固定PE与收盘价的曲线 plt.show()
fig2_name = 'fig2 ' ax_power = HostAxes(fig2, [0.1, 0.08, 0.7, 0.9]) # generate a main axes ax_gear = ParasiteAxes( ax_power, sharex=ax_power ) # generate a parasite axes of the main axes, sharing the x axis ax_torque_multi_gear = ParasiteAxes(ax_power, sharex=ax_power) ax_power.parasites.append( ax_gear) # claiming the relation of the main and parasite axes ax_power.parasites.append(ax_torque_multi_gear) ax_power.axis['right'].set_visible(False) ax_gear.axis['right'].set_visible(True) ax_gear.axis['right'].major_ticklabels.set_visible(True) ax_gear.axis['right'].label.set_visible(True) if max(gear[wishing_list[figure_id][0]]) > 10: torque_mutil_gear_axisline = ax_torque_multi_gear.get_grid_helper( ).new_fixed_axis # ax_gear is the twin axes, no need to specify like this ax_torque_multi_gear.axis['right2'] = torque_mutil_gear_axisline( loc='right', axes=ax_torque_multi_gear, offset=(40, 0)) fig2.add_axes(ax_power) for order in wishing_list[ figure_id]: # fig name generating, containing the order included fig2_name = fig2_name + str(order) + ',' fig2_name = fig2_name[0:-1] gear_max = 0 power_max = 0 torque_mutil_gear_max = 0 lines_set = [] for wish_id in range(0, len(wishing_list[figure_id])): order = wishing_list[figure_id][wish_id]