python繪圖系列文章目錄
往期python繪圖合集:
python繪制簡(jiǎn)單的折線圖
python讀取excel中數(shù)據(jù)并繪制多子圖多組圖在一張畫布上
python繪制帶誤差棒的柱狀圖
python繪制多子圖并單獨(dú)顯示
python讀取excel數(shù)據(jù)并繪制多y軸圖像
python繪制柱狀圖并美化|不同顏色填充柱子
python隨機(jī)生成數(shù)據(jù)并用雙y軸繪制兩條帶誤差棒的折線圖
Python繪制帶誤差棒的柱狀圖漸變色填充含數(shù)據(jù)標(biāo)注(進(jìn)階)
python繪制散點(diǎn)圖|散點(diǎn)大小和顏色深淺由數(shù)值決定
Matplotlib繪制漂亮的餅狀圖|python繪制漂亮的餅狀圖
一、 數(shù)據(jù)準(zhǔn)備
通過 Pandas 的 read_excel() 函數(shù)讀取了 Excel 文件,將其轉(zhuǎn)為了數(shù)據(jù)框格式,并設(shè)置字體字號(hào),畫布大小。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
excel = pd.read_excel("C:/Users/ypzhao/Desktop/新能源汽車數(shù)據(jù).xlsx")
data = pd.DataFrame(excel)
# 生成隨機(jī)數(shù)據(jù)
x = data['年份']
y1 = data['銷量']
y2 = data['增長(zhǎng)率']
# 設(shè)置字體和字號(hào)
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['font.size'] = 24
font = {'family':'Times New Roman','size':28}
# 創(chuàng)建畫布和子圖
fig, ax1 = plt.subplots(figsize=(11,6),dpi=3000)
二、增加y軸
使用 ax1.bar() 函數(shù)繪制柱狀圖,ax2.plot() 函數(shù)繪制折線圖,設(shè)置坐標(biāo)軸標(biāo)簽和標(biāo)題,并設(shè)置坐標(biāo)軸字體和字號(hào)。
# 設(shè)置字體和字號(hào)
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['font.size'] = 24
font = {'family':'Times New Roman','size':28}
# 創(chuàng)建畫布和子圖
fig, ax1 = plt.subplots(figsize=(11,6),dpi=3000)
ax2 = ax1.twinx()
三、準(zhǔn)備顏色漸變
3.1 準(zhǔn)備顏色漸變
n_groups = 6
cmap = plt.get_cmap('coolwarm')
colors_1 = [cmap(i) for i in np.linspace(0, 0.8, n_groups)]
# 繪制圖
#繪制折線圖
bar_plot=ax1.bar(x, y1, color=colors_1)
#繪制柱狀圖
ax2.plot(x, y2, color='green',marker='*',markersize=10)
3.2 美化圖
# 設(shè)置坐標(biāo)軸標(biāo)簽和標(biāo)題
ax1.set_xlabel('年份',fontname='SimSun')
ax2.set_ylabel('增長(zhǎng)率/%', color='#3F7F4C',fontname='SimSun')
ax1.set_ylabel('銷量/萬輛', color='#6D8F18',fontname='SimSun')
# 設(shè)置坐標(biāo)軸字體和字號(hào)
for ax in [ax1, ax2]:
ax.tick_params(axis='both', which='major', labelsize=20)
for tick in ax.get_xticklabels() + ax.get_yticklabels():
tick.set_fontname('Times New Roman')
# 設(shè)置坐標(biāo)軸標(biāo)簽和標(biāo)題
ax1.set_xlabel('年份',fontname='SimSun')
ax2.set_ylabel('增長(zhǎng)率/%', color='#3F7F4C',fontname='SimSun')
ax1.set_ylabel('銷量/萬輛', color='#6D8F18',fontname='SimSun')
# 設(shè)置坐標(biāo)軸字體和字號(hào)
for ax in [ax1, ax2]:
ax.tick_params(axis='both', which='major', labelsize=20)
for tick in ax.get_xticklabels() + ax.get_yticklabels():
tick.set_fontname('Times New Roman')
# 設(shè)置網(wǎng)格線不可見
ax1.grid(visible=False)
ax2.grid(visible=False)
ax2.set_ylim(-45,390)
ax1.set_ylim(0,730)
# 設(shè)置雙坐標(biāo)軸的顏色不一致
ax1.spines['left'].set_color('#6D8F18')
ax1.spines['right'].set_color('#3F7F4C')
ax1.tick_params(axis='y', colors='#6D8F18')
ax2.tick_params(axis='y', colors='#3F7F4C')
ax1.grid(visible=False)
ax2.grid(visible=False)
ax2.set_ylim(-45,390)
ax1.set_ylim(0,730)
# 設(shè)置雙坐標(biāo)軸的顏色不一致
ax1.spines['left'].set_color('#6D8F18')
ax1.spines['right'].set_color('#3F7F4C')
ax1.tick_params(axis='y', colors='#6D8F18')
ax2.tick_params(axis='y', colors='#3F7F4C')
3.3給折線圖增添數(shù)據(jù)
for i, j in zip(x, y2):
ax.annotate('{:.2f}'.format(j), xy=(i, j), xytext=(-10, 10),
textcoords='offset points', fontsize=16)
3.4 調(diào)柱狀圖增加數(shù)據(jù)
for rect in bar_plot:
height = rect.get_height()
ax1.text(rect.get_x() + rect.get_width()/2., height+1, '%.1f' % (height),
ha='center', va='bottom', fontsize=16, color='blue',fontname='Times New Roman') # 字體顏色藍(lán)色
# 自動(dòng)調(diào)整布局
plt.tight_layout()
使用 rect.get_x() + rect.get_width()/2. 表示標(biāo)簽文本的位置,在柱形中心正上方;使用 rect.get_height()+0.5 表示標(biāo)簽文本的高度,在柱形頂端上方略微偏移;ha 和 va 參數(shù)分別用于設(shè)置文本標(biāo)簽的水平和垂直對(duì)齊方式。最后,f’{y[i]}’ 表示標(biāo)簽文本內(nèi)容,即柱形高度。文章來源:http://www.zghlxwxcb.cn/news/detail-495985.html
四、完成代碼
# -*- coding: utf-8 -*-
"""
Created on Sat May 20 17:55:37 2023
@author: ypzhao
"""
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib
excel = pd.read_excel("C:/Users/ypzhao/Desktop/新能源汽車數(shù)據(jù).xlsx")
data = pd.DataFrame(excel)
# 生成隨機(jī)數(shù)據(jù)
x = data['年份']
y1 = data['銷量']
y2 = data['增長(zhǎng)率']
# 設(shè)置字體和字號(hào)
matplotlib.rcParams['font.family'] = 'Times New Roman'
matplotlib.rcParams['font.size'] = 24
font = {'family':'Times New Roman','size':28}
# 創(chuàng)建畫布和子圖
fig, ax1 = plt.subplots(figsize=(11,6),dpi=3000)
ax2 = ax1.twinx()
# 準(zhǔn)備顏色漸變
n_groups = 6
cmap = plt.get_cmap('coolwarm')
colors_1 = [cmap(i) for i in np.linspace(0, 0.8, n_groups)]
# 繪制圖
bar_plot=ax1.bar(x, y1, color=colors_1)
# 調(diào)整字體顏色、柱子寬度等其他參數(shù)
ax2.plot(x, y2, color='green',marker='*',markersize=10)
# 設(shè)置坐標(biāo)軸標(biāo)簽和標(biāo)題
ax1.set_xlabel('年份',fontname='SimSun')
ax2.set_ylabel('增長(zhǎng)率/%', color='#3F7F4C',fontname='SimSun')
ax1.set_ylabel('銷量/萬輛', color='#6D8F18',fontname='SimSun')
# 設(shè)置坐標(biāo)軸字體和字號(hào)
for ax in [ax1, ax2]:
ax.tick_params(axis='both', which='major', labelsize=20)
for tick in ax.get_xticklabels() + ax.get_yticklabels():
tick.set_fontname('Times New Roman')
# 設(shè)置網(wǎng)格線不可見
ax1.grid(visible=False)
ax2.grid(visible=False)
ax2.set_ylim(-45,390)
ax1.set_ylim(0,730)
# 設(shè)置雙坐標(biāo)軸的顏色不一致
ax1.spines['left'].set_color('#6D8F18')
ax1.spines['right'].set_color('#3F7F4C')
ax1.tick_params(axis='y', colors='#6D8F18')
ax2.tick_params(axis='y', colors='#3F7F4C')
# 給折線圖增添數(shù)據(jù)
for i, j in zip(x, y2):
ax.annotate('{:.2f}'.format(j), xy=(i, j), xytext=(-10, 10),
textcoords='offset points', fontsize=16)
# 調(diào)柱狀圖增加數(shù)據(jù)
for rect in bar_plot:
height = rect.get_height()
ax1.text(rect.get_x() + rect.get_width()/2., height+1, '%.1f' % (height),
ha='center', va='bottom', fontsize=16, color='blue',fontname='Times New Roman') # 字體顏色藍(lán)色
# 自動(dòng)調(diào)整布局
plt.tight_layout()
plt.savefig("sells.jpg",dpi=3000)
六 運(yùn)行結(jié)果
本文涉及數(shù)據(jù)鏈接及代碼(點(diǎn)擊獲取數(shù)據(jù)):文章來源地址http://www.zghlxwxcb.cn/news/detail-495985.html
到了這里,關(guān)于python讀取excel數(shù)據(jù)并用雙y軸繪制柱狀圖和折線圖,柱子用漸變顏色填充的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!