日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 动态图表 大屏_爱了!Python 动态图表太太太秀了!

發布時間:2023/12/8 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 动态图表 大屏_爱了!Python 动态图表太太太秀了! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:愛了!Python 動態圖表太太太秀了!

本文轉自:法納斯特,作者:小F

關于動態條形圖,小F以前推薦過 「Bar Chart Race」這個庫。三行代碼就能實現動態條形圖的繪制。

有些同學在使用的時候,會出現一些錯誤。一個是加載文件報錯,另一個是生成GIF的時候報錯。

這是因為作者的示例是網絡加載數據,會讀取不到。通過讀取本地文件,就不會出錯。

GIF生成失敗一般是需要安裝 imagemagick(圖片處理工具)。

最近小F又發現一 個可視化圖庫「 Pandas_Alive」,不僅包含動態條形圖,還 可以繪制動態曲線圖、氣泡圖、餅狀圖、地圖等。

同樣也是幾行代碼就能完成動態圖表的繪制。

GitHub地址:

https://github.com/JackMcKew/pandas_alive

使用文檔:https://jackmckew.github.io/pandas_alive/

安裝版本建議是0.2.3, matplotlib版本是3.2.1。

同時需自行安裝tqdm(顯示進度條)和descartes(繪制地圖相關庫)。

要不然會出現報錯,估計是作者的requestment.txt沒包含這兩個庫。

好了,成功 安裝后就可以引入這個第三方庫,直接選擇加載本地文件。

importpandas_alive

importpandas aspd

covid_df = pd.read_csv( 'data/covid19.csv', index_col= 0, parse_dates=[ 0])

covid_df.plot_animated(filename= 'examples/example-barh-chart.gif', n_visible= 15)

生成了一個GIF圖,具體如下。

剛開始學習這個庫的時候,大家可以 減少數據,這樣 生成GIF的時間就會快一些。

比如小F在接下來的實踐中,基本都只選取了20天左右的數據。

對于其他圖表,我們可以查看官方文檔的API說明,得以了解。

下面我們就來看看其他動態圖表的繪制方法吧!

01 動態條形圖

elec_df = pd.read_csv( "data/Aus_Elec_Gen_1980_2018.csv", index_col= 0, parse_dates=[ 0], thousands= ',')

elec_df = elec_df.iloc[: 20, :]

elec_df.fillna( 0).plot_animated( 'examples/example-electricity-generated-australia.gif', period_fmt= "%Y",

title= 'Australian Electricity Generation Sources 1980-2018')

02 動態柱狀圖

covid_df = pd.read_csv( 'data/covid19.csv', index_col= 0, parse_dates=[ 0])

covid_df.plot_animated(filename= 'examples/example-barv-chart.gif', orientation= 'v', n_visible= 15)

03 動態曲線圖

covid_df = pd.read_csv( 'data/covid19.csv', index_col= 0, parse_dates=[ 0])

covid_df.diff.fillna( 0).plot_animated(filename= 'examples/example-line-chart.gif', kind= 'line', period_label={ 'x': 0.25, 'y': 0.9})

?

04 動態面積圖

covid_df = pd.read_csv( 'data/covid19.csv', index_col= 0, parse_dates=[ 0])

covid_df.sum(axis= 1).fillna( 0).plot_animated(filename= 'examples/example-bar-chart.gif', kind= 'bar',

period_label={ 'x': 0.1, 'y': 0.9},

enable_progress_bar= True, steps_per_period= 2, interpolate_period= True, period_length= 200

)

05 動態散點圖

max_temp_df = pd.read_csv(

"data/Newcastle_Australia_Max_Temps.csv",

parse_dates={ "Timestamp": [ "Year", "Month", "Day"]},

)

min_temp_df = pd.read_csv(

"data/Newcastle_Australia_Min_Temps.csv",

parse_dates={ "Timestamp": [ "Year", "Month", "Day"]},

)

max_temp_df = max_temp_df.iloc[: 5000, :]

min_temp_df = min_temp_df.iloc[: 5000, :]

merged_temp_df = pd.merge_asof(max_temp_df, min_temp_df, on= "Timestamp")

merged_temp_df.index = pd.to_datetime(merged_temp_df[ "Timestamp"].dt.strftime( '%Y/%m/%d'))

keep_columns = [ "Minimum temperature (Degree C)", "Maximum temperature (Degree C)"]

merged_temp_df[keep_columns].resample( "Y").mean.plot_animated(filename= 'examples/example-scatter-chart.gif', kind= "scatter",

title= 'Max & Min Temperature Newcastle, Australia')

06 動態餅狀圖

covid_df = pd.read_csv( 'data/covid19.csv', index_col= 0, parse_dates=[ 0])

covid_df.plot_animated(filename= 'examples/example-pie-chart.gif', kind= "pie",

rotatelabels= True, period_label={ 'x': 0, 'y': 0})

07 動態氣泡圖

multi_index_df = pd.read_csv( "data/multi.csv", header=[ 0, 1], index_col= 0)

multi_index_df.index = pd.to_datetime(multi_index_df.index, dayfirst= True)

map_chart = multi_index_df.plot_animated(

kind= "bubble",

filename= "examples/example-bubble-chart.gif",

x_data_label= "Longitude",

y_data_label= "Latitude",

size_data_label= "Cases",

color_data_label= "Cases",

vmax= 5, steps_per_period= 3, interpolate_period= True, period_length= 500,

dpi= 100

)

08 地理空間點圖表

importgeopandas

importpandas_alive

importcontextily

gdf = geopandas.read_file( 'data/nsw-covid19-cases-by-postcode.gpkg')

gdf.index = gdf.postcode

gdf = gdf.drop( 'postcode',axis= 1)

result = gdf.iloc[:, : 20]

result[ 'geometry'] = gdf.iloc[:, -1:][ 'geometry']

map_chart = result.plot_animated(filename= 'examples/example-geo-point-chart.gif',

basemap_format={ 'source':contextily.providers.Stamen.Terrain})

09 多邊形地理圖表

importgeopandas

importpandas_alive

importcontextily

gdf = geopandas.read_file( 'data/italy-covid-region.gpkg')

gdf.index = gdf.region

gdf = gdf.drop( 'region',axis= 1)

result = gdf.iloc[:, : 20]

result[ 'geometry'] = gdf.iloc[:, -1:][ 'geometry']

map_chart = result.plot_animated(filename= 'examples/example-geo-polygon-chart.gif',

basemap_format={ 'source': contextily.providers.Stamen.Terrain})

10 多個動態圖表

covid_df = pd.read_csv( 'data/covid19.csv', index_col= 0, parse_dates=[ 0])

animated_line_chart = covid_df.diff.fillna( 0).plot_animated(kind= 'line', period_label= False,add_legend= False)

animated_bar_chart = covid_df.plot_animated(n_visible= 10)

pandas_alive.animate_multiple_plots( 'examples/example-bar-and-line-chart.gif',

[animated_bar_chart, animated_line_chart], enable_progress_bar= True)

11 城市人口

defpopulation:

urban_df = pd.read_csv( "data/urban_pop.csv", index_col= 0, parse_dates=[ 0])

animated_line_chart = (

urban_df.sum(axis= 1)

.pct_change

.fillna(method= 'bfill')

.mul( 100)

.plot_animated(kind= "line", title= "Total % Change in Population", period_label= False, add_legend= False)

)

animated_bar_chart = urban_df.plot_animated(n_visible= 10, title= 'Top 10 Populous Countries', period_fmt= "%Y")

pandas_alive.animate_multiple_plots( 'examples/example-bar-and-line-urban-chart.gif',

[animated_bar_chart, animated_line_chart],

title= 'Urban Population 1977 - 2018', adjust_subplot_top= 0.85,

enable_progress_bar= True)

12 G7國家平均壽命

deflife:

data_raw = pd.read_csv( "data/long.csv")

list_G7 = [

"Canada",

"France",

"Germany",

"Italy",

"Japan",

"United Kingdom",

"United States",

]

data_raw = data_raw.pivot(

index= "Year", columns= "Entity", values= "Life expectancy (Gapminder, UN)"

)

data = pd.DataFrame

data[ "Year"] = data_raw.reset_index[ "Year"]

forcountry inlist_G7:

data[country] = data_raw[country].values

data = data.fillna(method= "pad")

data = data.fillna( 0)

data = data.set_index( "Year").loc[ 1900:].reset_index

data[ "Year"] = pd.to_datetime(data.reset_index[ "Year"].astype(str))

data = data.set_index( "Year")

data = data.iloc[: 25, :]

animated_bar_chart = data.plot_animated(

period_fmt= "%Y", perpendicular_bar_func= "mean", period_length= 200, fixed_max= True

)

animated_line_chart = data.plot_animated(

kind= "line", period_fmt= "%Y", period_length= 200, fixed_max= True

)

pandas_alive.animate_multiple_plots(

"examples/life-expectancy.gif",

plots=[animated_bar_chart, animated_line_chart],

title= "Life expectancy in G7 countries up to 2015",

adjust_subplot_left= 0.2, adjust_subplot_top= 0.9, enable_progress_bar= True

)

13 新南威爾斯州COVID可視化

defnsw:

importgeopandas

importpandas aspd

importpandas_alive

importcontextily

importmatplotlib.pyplot asplt

importjson

withopen( 'data/package_show.json', 'r', encoding= 'utf8') asfp:

data = json.load(fp)

# Extract url to csv component

covid_nsw_data_url = data[ "result"][ "resources"][ 0][ "url"]

print(covid_nsw_data_url)

# Read csv from data API url

nsw_covid = pd.read_csv( 'data/confirmed_cases_table1_location.csv')

postcode_dataset = pd.read_csv( "data/postcode-data.csv")

# Prepare data from NSW health dataset

nsw_covid = nsw_covid.fillna( 9999)

nsw_covid[ "postcode"] = nsw_covid[ "postcode"].astype(int)

grouped_df = nsw_covid.groupby([ "notification_date", "postcode"]).size

grouped_df = pd.DataFrame(grouped_df).unstack

grouped_df.columns = grouped_df.columns.droplevel.astype(str)

grouped_df = grouped_df.fillna( 0)

grouped_df.index = pd.to_datetime(grouped_df.index)

cases_df = grouped_df

# Clean data in postcode dataset prior to matching

grouped_df = grouped_df.T

postcode_dataset = postcode_dataset[postcode_dataset[ 'Longitude'].notna]

postcode_dataset = postcode_dataset[postcode_dataset[ 'Longitude'] != 0]

postcode_dataset = postcode_dataset[postcode_dataset[ 'Latitude'].notna]

postcode_dataset = postcode_dataset[postcode_dataset[ 'Latitude'] != 0]

postcode_dataset[ 'Postcode'] = postcode_dataset[ 'Postcode'].astype(str)

# Build GeoDataFrame from Lat Long dataset and make map chart

grouped_df[ 'Longitude'] = grouped_df.index.map(postcode_dataset.set_index( 'Postcode')[ 'Longitude'].to_dict)

grouped_df[ 'Latitude'] = grouped_df.index.map(postcode_dataset.set_index( 'Postcode')[ 'Latitude'].to_dict)

gdf = geopandas.GeoDataFrame(

grouped_df, geometry=geopandas.points_from_xy(grouped_df.Longitude, grouped_df.Latitude), crs= "EPSG:4326")

gdf = gdf.dropna

# Prepare GeoDataFrame for writing to geopackage

gdf = gdf.drop([ 'Longitude', 'Latitude'], axis= 1)

gdf.columns = gdf.columns.astype(str)

gdf[ 'postcode'] = gdf.index

# gdf.to_file("data/nsw-covid19-cases-by-postcode.gpkg", layer='nsw-postcode-covid', driver="GPKG")

# Prepare GeoDataFrame for plotting

gdf.index = gdf.postcode

gdf = gdf.drop( 'postcode', axis= 1)

gdf = gdf.to_crs( "EPSG:3857") # Web Mercator

result = gdf.iloc[:, : 22]

result[ 'geometry'] = gdf.iloc[:, -1:][ 'geometry']

gdf = result

map_chart = gdf.plot_animated(basemap_format={ 'source': contextily.providers.Stamen.Terrain}, cmap= 'cool')

# cases_df.to_csv('data/nsw-covid-cases-by-postcode.csv')

cases_df = cases_df.iloc[: 22, :]

fromdatetime importdatetime

bar_chart = cases_df.sum(axis= 1).plot_animated(

kind= 'line',

label_events={

'Ruby Princess Disembark': datetime.strptime( "19/03/2020", "%d/%m/%Y"),

# 'Lockdown': datetime.strptime("31/03/2020", "%d/%m/%Y")

},

fill_under_line_color= "blue",

add_legend= False

)

map_chart.ax.set_title( 'Cases by Location')

grouped_df = pd.read_csv( 'data/nsw-covid-cases-by-postcode.csv', index_col= 0, parse_dates=[ 0])

grouped_df = grouped_df.iloc[: 22, :]

line_chart = (

grouped_df.sum(axis= 1)

.cumsum

.fillna( 0)

.plot_animated(kind= "line", period_label= False, title= "Cumulative Total Cases", add_legend= False)

)

defcurrent_total(values):

total = values.sum

s = f'Total : {int(total)}'

return{ 'x': .85, 'y': .2, 's': s, 'ha': 'right', 'size': 11}

race_chart = grouped_df.cumsum.plot_animated(

n_visible= 5, title= "Cases by Postcode", period_label= False, period_summary_func=current_total

)

importtime

timestr = time.strftime( "%d/%m/%Y")

plots = [bar_chart, line_chart, map_chart, race_chart]

frommatplotlib importrcParams

rcParams.update({ "figure.autolayout": False})

# make sure figures are `Figure` instances

figs = plt.Figure

gs = figs.add_gridspec( 2, 3, hspace= 0.5)

f3_ax1 = figs.add_subplot(gs[ 0, :])

f3_ax1.set_title(bar_chart.title)

bar_chart.ax = f3_ax1

f3_ax2 = figs.add_subplot(gs[ 1, 0])

f3_ax2.set_title(line_chart.title)

line_chart.ax = f3_ax2

f3_ax3 = figs.add_subplot(gs[ 1, 1])

f3_ax3.set_title(map_chart.title)

map_chart.ax = f3_ax3

f3_ax4 = figs.add_subplot(gs[ 1, 2])

f3_ax4.set_title(race_chart.title)

race_chart.ax = f3_ax4

timestr = cases_df.index.max.strftime( "%d/%m/%Y")

figs.suptitle( f"NSW COVID-19 Confirmed Cases up to {timestr}")

pandas_alive.animate_multiple_plots(

'examples/nsw-covid.gif',

plots,

figs,

enable_progress_bar= True

)

14 意大利 COVID可視化

defitaly:

importgeopandas

importpandas aspd

importpandas_alive

importcontextily

importmatplotlib.pyplot asplt

region_gdf = geopandas.read_file( 'data/geo-data/italy-with-regions')

region_gdf.NOME_REG = region_gdf.NOME_REG.str.lower.str.title

region_gdf = region_gdf.replace( 'Trentino-Alto Adige/Sudtirol', 'Trentino-Alto Adige')

region_gdf = region_gdf.replace( "Valle D'Aosta/Vall??e D'AosternValle D'Aosta/Vall??e D'Aoste", "Valle d'Aosta")

italy_df = pd.read_csv( 'data/Regional Data - Sheet1.csv', index_col= 0, header= 1, parse_dates=[ 0])

italy_df = italy_df[italy_df[ 'Region'] != 'NA']

cases_df = italy_df.iloc[:, : 3]

cases_df[ 'Date'] = cases_df.index

pivoted = cases_df.pivot(values= 'New positives', index= 'Date', columns= 'Region')

pivoted.columns = pivoted.columns.astype(str)

pivoted = pivoted.rename(columns={ 'nan': 'Unknown Region'})

cases_gdf = pivoted.T

cases_gdf[ 'geometry'] = cases_gdf.index.map(region_gdf.set_index( 'NOME_REG')[ 'geometry'].to_dict)

cases_gdf = cases_gdf[cases_gdf[ 'geometry'].notna]

cases_gdf = geopandas.GeoDataFrame(cases_gdf, crs=region_gdf.crs, geometry=cases_gdf.geometry)

gdf = cases_gdf

result = gdf.iloc[:, : 22]

result[ 'geometry'] = gdf.iloc[:, -1:][ 'geometry']

gdf = result

map_chart = gdf.plot_animated(basemap_format={ 'source': contextily.providers.Stamen.Terrain}, cmap= 'viridis')

cases_df = pivoted

cases_df = cases_df.iloc[: 22, :]

fromdatetime importdatetime

bar_chart = cases_df.sum(axis= 1).plot_animated(

kind= 'line',

label_events={

'Schools Close': datetime.strptime( "4/03/2020", "%d/%m/%Y"),

'Phase I Lockdown': datetime.strptime( "11/03/2020", "%d/%m/%Y"),

# '1M Global Cases': datetime.strptime("02/04/2020", "%d/%m/%Y"),

# '100k Global Deaths': datetime.strptime("10/04/2020", "%d/%m/%Y"),

# 'Manufacturing Reopens': datetime.strptime("26/04/2020", "%d/%m/%Y"),

# 'Phase II Lockdown': datetime.strptime("4/05/2020", "%d/%m/%Y"),

},

fill_under_line_color= "blue",

add_legend= False

)

map_chart.ax.set_title( 'Cases by Location')

line_chart = (

cases_df.sum(axis= 1)

.cumsum

.fillna( 0)

.plot_animated(kind= "line", period_label= False, title= "Cumulative Total Cases", add_legend= False)

)

defcurrent_total(values):

total = values.sum

s = f'Total : {int(total)}'

return{ 'x': .85, 'y': .1, 's': s, 'ha': 'right', 'size': 11}

race_chart = cases_df.cumsum.plot_animated(

n_visible= 5, title= "Cases by Region", period_label= False, period_summary_func=current_total

)

importtime

timestr = time.strftime( "%d/%m/%Y")

plots = [bar_chart, race_chart, map_chart, line_chart]

# Otherwise titles overlap and adjust_subplot does nothing

frommatplotlib importrcParams

frommatplotlib.animation importFuncAnimation

rcParams.update({ "figure.autolayout": False})

# make sure figures are `Figure` instances

figs = plt.Figure

gs = figs.add_gridspec( 2, 3, hspace= 0.5)

f3_ax1 = figs.add_subplot(gs[ 0, :])

f3_ax1.set_title(bar_chart.title)

bar_chart.ax = f3_ax1

f3_ax2 = figs.add_subplot(gs[ 1, 0])

f3_ax2.set_title(race_chart.title)

race_chart.ax = f3_ax2

f3_ax3 = figs.add_subplot(gs[ 1, 1])

f3_ax3.set_title(map_chart.title)

map_chart.ax = f3_ax3

f3_ax4 = figs.add_subplot(gs[ 1, 2])

f3_ax4.set_title(line_chart.title)

line_chart.ax = f3_ax4

axes = [f3_ax1, f3_ax2, f3_ax3, f3_ax4]

timestr = cases_df.index.max.strftime( "%d/%m/%Y")

figs.suptitle( f"Italy COVID-19 Confirmed Cases up to {timestr}")

pandas_alive.animate_multiple_plots(

'examples/italy-covid.gif',

plots,

figs,

enable_progress_bar= True

)

15 單擺運動

defsimple:

importpandas aspd

importmatplotlib.pyplot asplt

importpandas_alive

importnumpy asnp

# Physical constants

g = 9.81

L = .4

mu = 0.2

THETA_0 = np.pi * 70/ 180# init angle = 70degs

THETA_DOT_0 = 0# no init angVel

DELTA_T = 0.01# time stepping

T = 1.5# time period

# Definition of ODE (ordinary differential equation)

defget_theta_double_dot(theta, theta_dot):

return-mu * theta_dot - (g / L) * np.sin(theta)

# Solution to the differential equation

defpendulum(t):

# initialise changing values

theta = THETA_0

theta_dot = THETA_DOT_0

delta_t = DELTA_T

ang = []

ang_vel = []

ang_acc = []

times = []

fortime innp.arange( 0, t, delta_t):

theta_double_dot = get_theta_double_dot(

theta, theta_dot

)

theta += theta_dot * delta_t

theta_dot += theta_double_dot * delta_t

times.append(time)

ang.append(theta)

ang_vel.append(theta_dot)

ang_acc.append(theta_double_dot)

data = np.array([ang, ang_vel, ang_acc])

returnpd.DataFrame(data=data.T, index=np.array(times), columns=[ "angle", "ang_vel", "ang_acc"])

# units used for ref: ["angle [rad]", "ang_vel [rad/s]", "ang_acc [rad/s^2]"]

df = pendulum(T)

df.index.names = [ "Time (s)"]

print(df)

# generate dataFrame for animated bubble plot

df2 = pd.DataFrame(index=df.index)

df2[ "dx (m)"] = L * np.sin(df[ "angle"])

df2[ "dy (m)"] = -L * np.cos(df[ "angle"])

df2[ "ang_vel"] = abs(df[ "ang_vel"])

df2[ "size"] = df2[ "ang_vel"] * 100# scale angular vels to get nice size on bubble plot

print(df2)

# static pandas plots

#

# print(plt.style.available)

# NOTE:2 lines below required in Jupyter to switch styles correctly

plt.rcParams.update(plt.rcParamsDefault)

plt.style.use( "ggplot") # set plot style

fig, (ax1a, ax2b) = plt.subplots( 1, 2, figsize=( 8, 4), dpi= 100) # 1 row, 2 subplots

# fig.subplots_adjust(wspace=0.1) # space subplots in row

fig.set_tight_layout( True)

fontsize = "small"

df.plot(ax=ax1a).legend(fontsize=fontsize)

ax1a.set_title( "Outputs vs Time", fontsize= "medium")

ax1a.set_xlabel( 'Time [s]', fontsize=fontsize)

ax1a.set_ylabel( 'Amplitudes', fontsize=fontsize);

df.plot(ax=ax2b, x= "angle", y=[ "ang_vel", "ang_acc"]).legend(fontsize=fontsize)

ax2b.set_title( "Outputs vs Angle | Phase-Space", fontsize= "medium")

ax2b.set_xlabel( 'Angle [rad]', fontsize=fontsize)

ax2b.set_ylabel( 'Angular Velocity / Acc', fontsize=fontsize)

# sample scatter plot with colorbar

fig, ax = plt.subplots

sc = ax.scatter(df2[ "dx (m)"], df2[ "dy (m)"], s=df2[ "size"] * .1, c=df2[ "ang_vel"], cmap= "jet")

cbar = fig.colorbar(sc)

cbar.set_label(label= "ang_vel [rad/s]", fontsize= "small")

# sc.set_clim(350, 400)

ax.tick_params(labelrotation= 0, labelsize= "medium")

ax_scale = 1.

ax.set_xlim(-L * ax_scale, L * ax_scale)

ax.set_ylim(-L * ax_scale - 0.1, L * ax_scale - 0.1)

# make axes square: a circle shows as a circle

ax.set_aspect( 1/ ax.get_data_ratio)

ax.arrow( 0, 0, df2[ "dx (m)"].iloc[ -1], df2[ "dy (m)"].iloc[ -1],

color= "dimgray", ls= ":", lw= 2.5, width= .0, head_width= 0, zorder= -1

)

ax.text( 0, 0.15, s= "size and colour of pendulum bobnbased on pd columnnfor angular velocity",

ha= 'center', va= 'center')

# plt.show

dpi = 100

ax_scale = 1.1

figsize = ( 3, 3)

fontsize = "small"

# set up figure to pass onto `pandas_alive`

# NOTE:by using Figure (capital F) instead of figure `FuncAnimation` seems to run twice as fast!

# fig1, ax1 = plt.subplots

fig1 = plt.Figure

ax1 = fig1.add_subplot

fig1.set_size_inches(figsize)

ax1.set_title( "Simple pendulum animation, L="+ str(L) + "m", fontsize= "medium")

ax1.set_xlabel( "Time (s)", color= 'dimgray', fontsize=fontsize)

ax1.set_ylabel( "Amplitudes", color= 'dimgray', fontsize=fontsize)

ax1.tick_params(labelsize=fontsize)

# pandas_alive

line_chart = df.plot_animated(filename= "pend-line.gif", kind= 'line', period_label={ 'x': 0.05, 'y': 0.9},

steps_per_period= 1, interpolate_period= False, period_length= 50,

period_fmt= 'Time:{x:10.2f}',

enable_progress_bar= True, fixed_max= True, dpi= 100, fig=fig1

)

plt.close

# Video('examples/pend-line.mp4', html_attributes="controls muted autoplay")

# set up and generate animated scatter plot

#

# set up figure to pass onto `pandas_alive`

# NOTE:by using Figure (capital F) instead of figure `FuncAnimation` seems to run twice as fast!

fig1sc = plt.Figure

ax1sc = fig1sc.add_subplot

fig1sc.set_size_inches(figsize)

ax1sc.set_title( "Simple pendulum animation, L="+ str(L) + "m", fontsize= "medium")

ax1sc.set_xlabel( "Time (s)", color= 'dimgray', fontsize=fontsize)

ax1sc.set_ylabel( "Amplitudes", color= 'dimgray', fontsize=fontsize)

ax1sc.tick_params(labelsize=fontsize)

# pandas_alive

scatter_chart = df.plot_animated(filename= "pend-scatter.gif", kind= 'scatter', period_label={ 'x': 0.05, 'y': 0.9},

steps_per_period= 1, interpolate_period= False, period_length= 50,

period_fmt= 'Time:{x:10.2f}',

enable_progress_bar= True, fixed_max= True, dpi= 100, fig=fig1sc, size= "ang_vel"

)

plt.close

print( "Points size follows one of the pd columns: ang_vel")

# Video('./pend-scatter.gif', html_attributes="controls muted autoplay")

# set up and generate animated bar race chart

#

# set up figure to pass onto `pandas_alive`

# NOTE:by using Figure (capital F) instead of figure `FuncAnimation` seems to run twice as fast!

fig2 = plt.Figure

ax2 = fig2.add_subplot

fig2.set_size_inches(figsize)

ax2.set_title( "Simple pendulum animation, L="+ str(L) + "m", fontsize= "medium")

ax2.set_xlabel( "Amplitudes", color= 'dimgray', fontsize=fontsize)

ax2.set_ylabel( "", color= 'dimgray', fontsize= "x-small")

ax2.tick_params(labelsize=fontsize)

# pandas_alive

race_chart = df.plot_animated(filename= "pend-race.gif", kind= 'race', period_label={ 'x': 0.05, 'y': 0.9},

steps_per_period= 1, interpolate_period= False, period_length= 50,

period_fmt= 'Time:{x:10.2f}',

enable_progress_bar= True, fixed_max= False, dpi= 100, fig=fig2

)

plt.close

# set up and generate bubble animated plot

#

# set up figure to pass onto `pandas_alive`

# NOTE:by using Figure (capital F) instead of figure `FuncAnimation` seems to run twice as fast!

fig3 = plt.Figure

ax3 = fig3.add_subplot

fig3.set_size_inches(figsize)

ax3.set_title( "Simple pendulum animation, L="+ str(L) + "m", fontsize= "medium")

ax3.set_xlabel( "Hor Displacement (m)", color= 'dimgray', fontsize=fontsize)

ax3.set_ylabel( "Ver Displacement (m)", color= 'dimgray', fontsize=fontsize)

# limits & ratio below get the graph square

ax3.set_xlim(-L * ax_scale, L * ax_scale)

ax3.set_ylim(-L * ax_scale - 0.1, L * ax_scale - 0.1)

ratio = 1.# this is visual ratio of axes

ax3.set_aspect(ratio / ax3.get_data_ratio)

ax3.arrow( 0, 0, df2[ "dx (m)"].iloc[ -1], df2[ "dy (m)"].iloc[ -1],

color= "dimgray", ls= ":", lw= 1, width= .0, head_width= 0, zorder= -1)

# pandas_alive

bubble_chart = df2.plot_animated(

kind= "bubble", filename= "pend-bubble.gif",

x_data_label= "dx (m)", y_data_label= "dy (m)",

size_data_label= "size", color_data_label= "ang_vel", cmap= "jet",

period_label={ 'x': 0.05, 'y': 0.9}, vmin= None, vmax= None,

steps_per_period= 1, interpolate_period= False, period_length= 50, period_fmt= 'Time:{x:10.2f}s',

enable_progress_bar= True, fixed_max= False, dpi=dpi, fig=fig3

)

plt.close

print( "Bubble size & colour animates with pd data column for ang_vel.")

# Combined plots

#

fontsize = "x-small"

# Otherwise titles overlap and subplots_adjust does nothing

frommatplotlib importrcParams

rcParams.update({ "figure.autolayout": False})

figs = plt.Figure(figsize=( 9, 4), dpi= 100)

figs.subplots_adjust(wspace= 0.1)

gs = figs.add_gridspec( 2, 2)

ax1 = figs.add_subplot(gs[ 0, 0])

ax1.set_xlabel( "Time(s)", color= 'dimgray', fontsize=fontsize)

ax1.set_ylabel( "Amplitudes", color= 'dimgray', fontsize=fontsize)

ax1.tick_params(labelsize=fontsize)

ax2 = figs.add_subplot(gs[ 1, 0])

ax2.set_xlabel( "Amplitudes", color= 'dimgray', fontsize=fontsize)

ax2.set_ylabel( "", color= 'dimgray', fontsize=fontsize)

ax2.tick_params(labelsize=fontsize)

ax3 = figs.add_subplot(gs[:, 1])

ax3.set_xlabel( "Hor Displacement (m)", color= 'dimgray', fontsize=fontsize)

ax3.set_ylabel( "Ver Displacement (m)", color= 'dimgray', fontsize=fontsize)

ax3.tick_params(labelsize=fontsize)

# limits & ratio below get the graph square

ax3.set_xlim(-L * ax_scale, L * ax_scale)

ax3.set_ylim(-L * ax_scale - 0.1, L * ax_scale - 0.1)

ratio = 1.# this is visual ratio of axes

ax3.set_aspect(ratio / ax3.get_data_ratio)

line_chart.ax = ax1

race_chart.ax = ax2

bubble_chart.ax = ax3

plots = [line_chart, race_chart, bubble_chart]

# pandas_alive combined using custom figure

pandas_alive.animate_multiple_plots(

filename= 'pend-combined.gif', plots=plots, custom_fig=figs, dpi= 100, enable_progress_bar= True,

adjust_subplot_left= 0.2, adjust_subplot_right= None,

title= "Simple pendulum animations, L="+ str(L) + "m", title_fontsize= "medium"

)

plt.close

最后如果你想完成 中文動態圖表的制作,加入中文顯示代碼即可。

# 中文顯示

plt.rcParams[ 'font.sans-serif'] = [ 'SimHei'] # Windows

plt.rcParams[ 'font.sans-serif'] = [ 'Hiragino Sans GB'] # Mac

plt.rcParams[ 'axes.unicode_minus'] = False

# 讀取數據

df_result = pd.read_csv( 'data/yuhuanshui.csv', index_col= 0, parse_dates=[ 0])

# 生成圖表

animated_line_chart = df_result.diff.fillna( 0).plot_animated(kind= 'line', period_label=False, add_legend=False)

animated_bar_chart = df_result.plot_animated(n_visible= 10)

pandas_alive.animate_multiple_plots( 'examples/yuhuanshui.gif',

[animated_bar_chart, animated_line_chart], enable_progress_bar=True,

title= '我是余歡水演職人員熱度排行')

還是使用演員的 百度指數數據。

下載方式

我把 CSV文件及相關代碼進行打包共享了,需要的同學可以后臺回復關鍵字 「動態圖」獲取~返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的python 动态图表 大屏_爱了!Python 动态图表太太太秀了!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。