1.turtle绘制奥运五环图
| import turtle as p |
| def drawCircle(x,y,c='red'): |
| p.pu() |
| p.goto(x,y) |
| p.pd() |
| p.color(c) |
| p.circle(30,360) |
| p.pensize(3) |
| drawCircle(0,0,'blue') |
| drawCircle(60,0,'black') |
| drawCircle(120,0,'red') |
| drawCircle(90,-30,'green') |
| drawCircle(30,-30,'yellow') |
| |
| p.done() |
2.turtle绘制漫天雪花
| import turtle as p |
| import random |
| |
| def snow(snow_count): |
| p.hideturtle() |
| p.speed(500) |
| p.pensize(2) |
| for i in range(snow_count): |
| r = random.random() |
| g = random.random() |
| b = random.random() |
| p.pencolor(r, g, b) |
| p.pu() |
| p.goto(random.randint(-350, 350), random.randint(1, 270)) |
| p.pd() |
| dens = random.randint(8, 12) |
| snowsize = random.randint(10, 14) |
| for _ in range(dens): |
| p.forward(snowsize) # 向当前画笔方向移动snowsize像素长度 |
| p.backward(snowsize) # 向当前画笔相反方向移动snowsize像素长度 |
| p.right(360 / dens) # 顺时针移动360 / dens度 |
| |
| def ground(ground_line_count): |
| p.hideturtle() |
| p.speed(500) |
| for i in range(ground_line_count): |
| p.pensize(random.randint(5, 10)) |
| x = random.randint(-400, 350) |
| y = random.randint(-280, -1) |
| r = -y / 280 |
| g = -y / 280 |
| b = -y / 280 |
| p.pencolor(r, g, b) |
| p.penup() # 抬起画笔 |
| p.goto(x, y) # 让画笔移动到此位置 |
| p.pendown() # 放下画笔 |
| p.forward(random.randint(40, 100)) # 眼当前画笔方向向前移动40~100距离 |
| |
| def main(): |
| p.setup(800, 600, 0, 0) |
| # p.tracer(False) |
| p.bgcolor("black") |
| snow(30) |
| ground(30) |
| # p.tracer(True) |
| p.mainloop() |
| |
| main() |
3 wordcloud词云图
| import hashlib |
| import pandas as pd |
| from wordcloud import WordCloud |
| geo_data=pd.read_excel(r"../data/geo_data.xlsx") |
| print(geo_data) |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| words = ','.join(x for x in geo_data['city'] if x != []) |
| wc = WordCloud( |
| background_color="green", |
| max_words=100, |
| font_path='./fonts/simhei.ttf', |
| min_font_size=5, |
| max_font_size=100, |
| width=500 |
| ) |
| x = wc.generate(words) |
| x.to_file('../data/geo_data.png') |
| |
4.plotly画柱状图和折线图
| |
| import plotly.graph_objects as go |
| fig = go.Figure() |
| fig.add_trace( |
| go.Scatter( |
| x=[0, 1, 2, 3, 4, 5], |
| y=[1.5, 1, 1.3, 0.7, 0.8, 0.9] |
| )) |
| fig.add_trace( |
| go.Bar( |
| x=[0, 1, 2, 3, 4, 5], |
| y=[2, 0.5, 0.7, -1.2, 0.3, 0.4] |
| )) |
| fig.show() |
| |
5.seaborn热力图
| # 导入库 |
| import seaborn as sns |
| import pandas as pd |
| import numpy as np |
| import matplotlib.pyplot as plt |
| |
| # 生成数据集 |
| data = np.random.random((6,6)) |
| np.fill_diagonal(data,np.ones(6)) |
| features = ["prop1","prop2","prop3","prop4","prop5", "prop6"] |
| data = pd.DataFrame(data, index = features, columns=features) |
| print(data) |
| # 绘制热力图 |
| heatmap_plot = sns.heatmap(data, center=0, cmap='gist_rainbow') |
| plt.show() |
| |
6.matplotlib折线图
模块名称:example_utils.py,里面包括三个函数,各自功能如下:
| import matplotlib.pyplot as plt |
| |
| |
| def setup_axes(): |
| fig, axes = plt.subplots(ncols=3, figsize=(6.5,3)) |
| for ax in fig.axes: |
| ax.set(xticks=[], yticks=[]) |
| fig.subplots_adjust(wspace=0, left=0, right=0.93) |
| return fig, axes |
| |
| def title(fig, text, y=0.9): |
| fig.suptitle(text, size=14, y=y, weight='semibold', x=0.98, ha='right', |
| bbox=dict(boxstyle='round', fc='floralwhite', ec='#8B7E66', |
| lw=2)) |
| |
| def label(ax, text, y=0): |
| ax.annotate(text, xy=(0.5, 0.00), xycoords='axes fraction', ha='center', |
| style='italic', |
| bbox=dict(boxstyle='round', facecolor='floralwhite', |
| ec='#8B7E66')) |
| |
| |
| import numpy as np |
| import matplotlib.pyplot as plt |
| |
| import example_utils |
| |
| x = np.linspace(0, 10, 100) |
| |
| fig, axes = example_utils.setup_axes() |
| for ax in axes: |
| ax.margins(y=0.10) |
| |
| |
| for i in range(1, 6): |
| axes[0].plot(x, i * x) |
| |
| |
| for i, ls in enumerate(['-', '--', ':', '-.']): |
| axes[1].plot(x, np.cos(x) + i, linestyle=ls) |
| |
| |
| for i, (ls, mk) in enumerate(zip(['', '-', ':'], ['o', '^', 's'])): |
| axes[2].plot(x, np.cos(x) + i * x, linestyle=ls, marker=mk, markevery=10) |
| |
| |
| |
| |
| fig.savefig('plot_example.png', facecolor='none') |
| |
| plt.show() |
| |
7.matplotlib散点图
| """ |
| 散点图的基本用法 |
| """ |
| import numpy as np |
| import matplotlib.pyplot as plt |
| |
| import example_utils |
| |
| |
| np.random.seed(1874) |
| x, y, z = np.random.normal(0, 1, (3, 100)) |
| t = np.arctan2(y, x) |
| size = 50 * np.cos(2 * t)**2 + 10 |
| |
| fig, axes = example_utils.setup_axes() |
| |
| |
| axes[0].scatter(x, y, marker='o', color='darkblue', facecolor='white', s=80) |
| example_utils.label(axes[0], 'scatter(x, y)') |
| |
| |
| axes[1].scatter(x, y, marker='s', color='darkblue', s=size) |
| example_utils.label(axes[1], 'scatter(x, y, s)') |
| |
| |
| axes[2].scatter(x, y, s=size, c=z, cmap='gist_ncar') |
| example_utils.label(axes[2], 'scatter(x, y, s, c)') |
| |
| |
| |
| fig.savefig('scatter_example.png', facecolor='none') |
| |
| plt.show() |
| |
8.matplotlib柱状图
| import numpy as np |
| import matplotlib.pyplot as plt |
| |
| import example_utils |
| |
| |
| def main(): |
| fig, axes = example_utils.setup_axes() |
| |
| basic_bar(axes[0]) |
| tornado(axes[1]) |
| general(axes[2]) |
| |
| # example_utils.title(fig, '"ax.bar(...)": Plot rectangles') |
| fig.savefig('bar_example.png', facecolor='none') |
| plt.show() |
| |
| # 子图1 |
| def basic_bar(ax): |
| y = [1, 3, 4, 5.5, 3, 2] |
| err = [0.2, 1, 2.5, 1, 1, 0.5] |
| x = np.arange(len(y)) |
| ax.bar(x, y, yerr=err, color='lightblue', ecolor='black') |
| ax.margins(0.05) |
| ax.set_ylim(bottom=0) |
| example_utils.label(ax, 'bar(x, y, yerr=e)') |
| |
| # 子图2 |
| def tornado(ax): |
| y = np.arange(8) |
| x1 = y + np.random.random(8) + 1 |
| x2 = y + 3 * np.random.random(8) + 1 |
| ax.barh(y, x1, color='lightblue') |
| ax.barh(y, -x2, color='salmon') |
| ax.margins(0.15) |
| example_utils.label(ax, 'barh(x, y)') |
| |
| # 子图3 |
| def general(ax): |
| num = 10 |
| left = np.random.randint(0, 10, num) |
| bottom = np.random.randint(0, 10, num) |
| width = np.random.random(num) + 0.5 |
| height = np.random.random(num) + 0.5 |
| ax.bar(left, height, width, bottom, color='salmon') |
| ax.margins(0.15) |
| example_utils.label(ax, 'bar(l, h, w, b)') |
| |
| |
| main() |
| |
9.matplotlib等高线图
| import matplotlib.pyplot as plt |
| import numpy as np |
| from matplotlib.cbook import get_sample_data |
| |
| import example_utils |
| |
| z = np.load(get_sample_data('bivariate_normal.npy')) |
| |
| fig, axes = example_utils.setup_axes() |
| |
| axes[0].contour(z, cmap='gist_earth') |
| example_utils.label(axes[0], 'contour') |
| |
| axes[1].contourf(z, cmap='gist_earth') |
| example_utils.label(axes[1], 'contourf') |
| |
| axes[2].contourf(z, cmap='gist_earth') |
| cont = axes[2].contour(z, colors='black') |
| axes[2].clabel(cont, fontsize=6) |
| example_utils.label(axes[2], 'contourf + contour\n + clabel') |
| |
| |
| |
| fig.savefig('contour_example.png', facecolor='none') |
| |
| plt.show() |
| |
10.imshow图
| import matplotlib.pyplot as plt |
| import numpy as np |
| from matplotlib.cbook import get_sample_data |
| from mpl_toolkits import axes_grid1 |
| |
| import example_utils |
| |
| |
| def main(): |
| fig, axes = setup_axes() |
| plot(axes, *load_data()) |
| # example_utils.title(fig, '"ax.imshow(data, ...)": Colormapped or RGB arrays') |
| fig.savefig('imshow_example.png', facecolor='none') |
| plt.show() |
| |
| |
| def plot(axes, img_data, scalar_data, ny): |
| |
| # 默认线性插值 |
| axes[0].imshow(scalar_data, cmap='gist_earth', extent=[0, ny, ny, 0]) |
| |
| # 最近邻插值 |
| axes[1].imshow(scalar_data, cmap='gist_earth', interpolation='nearest', |
| extent=[0, ny, ny, 0]) |
| |
| # 展示RGB/RGBA数据 |
| axes[2].imshow(img_data) |
| |
| |
| def load_data(): |
| img_data = plt.imread(get_sample_data('5.png')) |
| ny, nx, nbands = img_data.shape |
| scalar_data = np.load(get_sample_data('bivariate_normal.npy')) |
| return img_data, scalar_data, ny |
| |
| |
| def setup_axes(): |
| fig = plt.figure(figsize=(6, 3)) |
| axes = axes_grid1.ImageGrid(fig, [0, 0, .93, 1], (1, 3), axes_pad=0) |
| |
| for ax in axes: |
| ax.set(xticks=[], yticks=[]) |
| return fig, axes |
| |
| |
| main() |
| |
11.pyecharts绘制仪表盘
| from pyecharts import charts |
| |
| |
| gauge = charts.Gauge() |
| gauge.add('Python小例子', [('Python机器学习', 30), ('Python基础', 70.), |
| ('Python正则', 90)]) |
| gauge.render(path="./data/仪表盘.html") |
| print('ok') |
| |
12.pyecharts漏斗图
| from pyecharts import options as opts |
| from pyecharts.charts import Funnel, Page |
| from random import randint |
| |
| def funnel_base() -> Funnel: |
| c = ( |
| Funnel() |
| .add("豪车", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'], |
| [randint(1, 20) for _ in range(7)])]) |
| .set_global_opts(title_opts=opts.TitleOpts(title="豪车漏斗图")) |
| ) |
| return c |
| funnel_base().render('./img/car_fnnel.html') |
| |
13.pyecharts日历图
| import datetime |
| import random |
| from pyecharts import options as opts |
| from pyecharts.charts import Calendar |
| |
| def calendar_interval_1() -> Calendar: |
| begin = datetime.date(2019, 1, 1) |
| end = datetime.date(2019, 12, 27) |
| data = [ |
| [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)] |
| for i in range(0, (end - begin).days + 1, 2) # 隔天统计 |
| ] |
| calendar = ( |
| Calendar(init_opts=opts.InitOpts(width="1200px")).add( |
| "", data, calendar_opts=opts.CalendarOpts(range_="2019")) |
| .set_global_opts( |
| title_opts=opts.TitleOpts(title="Calendar-2019年步数统计"), |
| visualmap_opts=opts.VisualMapOpts( |
| max_=25000, |
| min_=1000, |
| orient="horizontal", |
| is_piecewise=True, |
| pos_top="230px", |
| pos_left="100px", |
| ), |
| ) |
| ) |
| return calendar |
| |
| calendar_interval_1().render('./img/calendar.html') |
| |
14.pyecharts绘制graph图
| import json |
| import os |
| from pyecharts import options as opts |
| from pyecharts.charts import Graph, Page |
| |
| def graph_base() -> Graph: |
| nodes = [ |
| {"name": "cus1", "symbolSize": 10}, |
| {"name": "cus2", "symbolSize": 30}, |
| {"name": "cus3", "symbolSize": 20} |
| ] |
| links = [] |
| for i in nodes: |
| if i.get('name') == 'cus1': |
| continue |
| for j in nodes: |
| if j.get('name') == 'cus1': |
| continue |
| links.append({"source": i.get("name"), "target": j.get("name")}) |
| c = ( |
| Graph() |
| .add("", nodes, links, repulsion=8000) |
| .set_global_opts(title_opts=opts.TitleOpts(title="customer-influence")) |
| ) |
| return c |
| |
15.pyecharts水球图
| from pyecharts import options as opts |
| from pyecharts.charts import Liquid, Page |
| from pyecharts.globals import SymbolType |
| |
| def liquid() -> Liquid: |
| c = ( |
| Liquid() |
| .add("lq", [0.67, 0.30, 0.15]) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Liquid")) |
| ) |
| return c |
| |
| liquid().render('./img/liquid.html') |
| |
| |
16.pyecharts饼图
| from pyecharts import options as opts |
| from pyecharts.charts import Pie |
| from random import randint |
| |
| def pie_base() -> Pie: |
| c = ( |
| Pie() |
| .add("", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'], |
| [randint(1, 20) for _ in range(7)])]) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例")) |
| .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) |
| ) |
| return c |
| |
| pie_base().render('./img/pie_pyecharts.html') |
| |
17.pyecharts极坐标图
| import random |
| from pyecharts import options as opts |
| from pyecharts.charts import Page, Polar |
| |
| def polar_scatter0() -> Polar: |
| data = [(alpha, random.randint(1, 100)) for alpha in range(101)] # r = random.randint(1, 100) |
| print(data) |
| c = ( |
| Polar() |
| .add("", data, type_="bar", label_opts=opts.LabelOpts(is_show=False)) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Polar")) |
| ) |
| return c |
| |
| polar_scatter0().render('./img/polar.html') |
| |
18.pyecharts词云图
| from pyecharts import options as opts |
| from pyecharts.charts import Page, WordCloud |
| from pyecharts.globals import SymbolType |
| |
| words = [ |
| ("Python", 100), |
| ("C++", 80), |
| ("Java", 95), |
| ("R", 50), |
| ("JavaScript", 79), |
| ("C", 65) |
| ] |
| |
| def wordcloud() -> WordCloud: |
| c = ( |
| WordCloud() |
| # word_size_range: 单词字体大小范围 |
| .add("", words, word_size_range=[20, 100], shape='cardioid') |
| .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud")) |
| ) |
| return c |
| |
| wordcloud().render('./img/wordcloud.html') |
| |
| |
19.pyecharts系列柱状图
| from pyecharts import options as opts |
| from pyecharts.charts import Bar |
| from random import randint |
| |
| def bar_series() -> Bar: |
| c = ( |
| Bar() |
| .add_xaxis(['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉']) |
| .add_yaxis("销量", [randint(1, 20) for _ in range(7)]) |
| .add_yaxis("产量", [randint(1, 20) for _ in range(7)]) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Bar的主标题", subtitle="Bar的副标题")) |
| ) |
| return c |
| |
| bar_series().render('./img/bar_series.html') |
| |
20.pyecharts热力图
| import random |
| from pyecharts import options as opts |
| from pyecharts.charts import HeatMap |
| |
| def heatmap_car() -> HeatMap: |
| x = ['宝马', '法拉利', '奔驰', '奥迪', '大众', '丰田', '特斯拉'] |
| y = ['中国','日本','南非','澳大利亚','阿根廷','阿尔及利亚','法国','意大利','加拿大'] |
| value = [[i, j, random.randint(0, 100)] |
| for i in range(len(x)) for j in range(len(y))] |
| c = ( |
| HeatMap() |
| .add_xaxis(x) |
| .add_yaxis("销量", y, value) |
| .set_global_opts( |
| title_opts=opts.TitleOpts(title="HeatMap"), |
| visualmap_opts=opts.VisualMapOpts(), |
| ) |
| ) |
| return c |
| |
| heatmap_car().render('./img/heatmap_pyecharts.html') |
| |
21.matplotlib绘制动画
matplotlib是python中最经典的绘图包,里面animation模块能绘制动画。
首先导入小例子使用的模块:
| from matplotlib import pyplot as plt |
| from matplotlib import animation |
| from random import randint, random |
生成数据,frames_count是帧的个数,data_count每个帧的柱子个数
| class Data: |
| data_count = 32 |
| frames_count = 2 |
| |
| def __init__(self, value): |
| self.value = value |
| self.color = (0.5, random(), random()) |
| |
| |
| @classmethod |
| def create(cls): |
| return [[Data(randint(1, cls.data_count)) for _ in range(cls.data_count)] |
| for frame_i in range(cls.frames_count)] |
绘制动画:animation.FuncAnimation函数的回调函数的参数fi表示第几帧,注意要调用axs.cla()清除上一帧。
| def draw_chart(): |
| fig = plt.figure(1, figsize=(16, 9)) |
| axs = fig.add_subplot(111) |
| axs.set_xticks([]) |
| axs.set_yticks([]) |
| |
| # 生成数据 |
| frames = Data.create() |
| |
| def animate(fi): |
| axs.cla() # clear last frame |
| axs.set_xticks([]) |
| axs.set_yticks([]) |
| return axs.bar(list(range(Data.data_count)), # X |
| [d.value for d in frames[fi]], # Y |
| 1, # width |
| color=[d.color for d in frames[fi]] # color |
| ) |
| # 动画展示 |
| anim = animation.FuncAnimation(fig, animate, frames=len(frames)) |
| plt.show() |
| |
| |
| draw_chart() |
22.pyecharts绘图属性设置方法
这是pyecharts中一般的绘图步骤:
| from pyecharts.faker import Faker |
| from pyecharts import options as opts |
| from pyecharts.charts import Bar |
| from pyecharts.commons.utils import JsCode |
| |
| def bar_base() -> Bar: |
| c = ( |
| Bar() |
| .add_xaxis(Faker.choose()) |
| .add_yaxis("商家A", Faker.values()) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) |
| ) |
| return c |
| |
| bar_base().render('./bar.html') |
那么,如何设置y轴显示在右侧,添加一行代码:
| .set_global_opts(yaxis_opts=opts.AxisOpts(position='right')) |
也就是:
| c = ( |
| Bar() |
| .add_xaxis(Faker.choose()) |
| .add_yaxis("商家A", Faker.values()) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")) |
| .set_global_opts(yaxis_opts=opts.AxisOpts(position='right')) |
| ) |
如何锁定这个属性,首先应该在set_global_opts函数的参数中找,它一共有以下11个设置参数,它们位于模块charts.py:
| title_opts: types.Title = opts.TitleOpts(), |
| legend_opts: types.Legend = opts.LegendOpts(), |
| tooltip_opts: types.Tooltip = None, |
| toolbox_opts: types.Toolbox = None, |
| brush_opts: types.Brush = None, |
| xaxis_opts: types.Axis = None, |
| yaxis_opts: types.Axis = None, |
| visualmap_opts: types.VisualMap = None, |
| datazoom_opts: types.DataZoom = None, |
| graphic_opts: types.Graphic = None, |
| axispointer_opts: types.AxisPointer = None, |
因为是设置y轴显示在右侧,自然想到设置参数yaxis_opts,因为其类型为types.Axis,所以再进入types.py,同时定位到Axis:
| Axis = Union[opts.AxisOpts, dict, None] |
Union是pyecharts中可容纳多个类型的并集列表,也就是Axis可能为opts.AxisOpt, dict, 或None三种类型。查看第一个opts.AxisOpt类,它共定义以下25个参数:
| type_: Optional[str] = None, |
| name: Optional[str] = None, |
| is_show: bool = True, |
| is_scale: bool = False, |
| is_inverse: bool = False, |
| name_location: str = "end", |
| name_gap: Numeric = 15, |
| name_rotate: Optional[Numeric] = None, |
| interval: Optional[Numeric] = None, |
| grid_index: Numeric = 0, |
| position: Optional[str] = None, |
| offset: Numeric = 0, |
| split_number: Numeric = 5, |
| boundary_gap: Union[str, bool, None] = None, |
| min_: Union[Numeric, str, None] = None, |
| max_: Union[Numeric, str, None] = None, |
| min_interval: Numeric = 0, |
| max_interval: Optional[Numeric] = None, |
| axisline_opts: Union[AxisLineOpts, dict, None] = None, |
| axistick_opts: Union[AxisTickOpts, dict, None] = None, |
| axislabel_opts: Union[LabelOpts, dict, None] = None, |
| axispointer_opts: Union[AxisPointerOpts, dict, None] = None, |
| name_textstyle_opts: Union[TextStyleOpts, dict, None] = None, |
| splitarea_opts: Union[SplitAreaOpts, dict, None] = None, |
| splitline_opts: Union[SplitLineOpts, dict] = SplitLineOpts(), |
观察后尝试参数position,结合官档:https://pyecharts.org/#/zh-cn/global_options?id=axisopts:坐标轴配置项,介绍x轴设置position时有bottom, top, 所以y轴设置很可能就是left,right.
23.pyecharts绘图属性设置方法(下)
1)柱状图显示效果动画对应控制代码:
| animation_opts=opts.AnimationOpts( |
| animation_delay=500, animation_easing="cubicOut" |
| ) |
2)柱状图显示主题对应控制代码:
3)添加x轴对应的控制代码:
| add_xaxis( ["草莓", "芒果", "葡萄", "雪梨", "西瓜", "柠檬", "车厘子"] |
4)添加y轴对应的控制代码:
| add_yaxis("A", Faker.values(), |
5)修改柱间距对应的控制代码:
6)A系列柱子是否显示对应的控制代码:
7)A系列柱子颜色渐变对应的控制代码:
| itemstyle_opts={ |
| "normal": { |
| "color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| offset: 0, |
| color: 'rgba(0, 244, 255, 1)' |
| }, { |
| offset: 1, |
| color: 'rgba(0, 77, 167, 1)' |
| }], false)"""), |
| "barBorderRadius": [6, 6, 6, 6], |
| "shadowColor": 'rgb(0, 160, 221)', |
| }} |
8)A系列柱子最大和最小值标记点对应的控制代码:
| markpoint_opts=opts.MarkPointOpts( |
| data=[ |
| opts.MarkPointItem(type_="max", name="最大值"), |
| opts.MarkPointItem(type_="min", name="最小值"), |
| ] |
| ) |
9)A系列柱子最大和最小值标记线对应的控制代码:
| markline_opts=opts.MarkLineOpts( |
| data=[ |
| opts.MarkLineItem(type_="min", name="最小值"), |
| opts.MarkLineItem(type_="max", name="最大值") |
| ] |
| ) |
10)柱状图标题对应的控制代码:
| title_opts=opts.TitleOpts(title="Bar-参数使用例子" |
11)柱状图非常有用的toolbox显示对应的控制代码:
| toolbox_opts=opts.ToolboxOpts() |
12)Y轴显示在右侧对应的控制代码:
| yaxis_opts=opts.AxisOpts(position="right") |
13)Y轴名称对应的控制代码:
| yaxis_opts=opts.AxisOpts(,name="Y轴") |
14)数据轴区域放大缩小设置对应的控制代码:
| datazoom_opts=opts.DataZoomOpts() |
完整代码
| def bar_border_radius(): |
| c = ( |
| Bar(init_opts=opts.InitOpts( |
| animation_opts=opts.AnimationOpts( |
| animation_delay=500, animation_easing="cubicOut" |
| ), |
| theme=ThemeType.MACARONS)) |
| .add_xaxis( ["草莓", "芒果", "葡萄", "雪梨", "西瓜", "柠檬", "车厘子"]) |
| .add_yaxis("A", Faker.values(),category_gap="50%",markpoint_opts=opts.MarkPointOpts(),is_selected=True) |
| .set_series_opts(itemstyle_opts={ |
| "normal": { |
| "color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| offset: 0, |
| color: 'rgba(0, 244, 255, 1)' |
| }, { |
| offset: 1, |
| color: 'rgba(0, 77, 167, 1)' |
| }], false)"""), |
| "barBorderRadius": [6, 6, 6, 6], |
| "shadowColor": 'rgb(0, 160, 221)', |
| }}, markpoint_opts=opts.MarkPointOpts( |
| data=[ |
| opts.MarkPointItem(type_="max", name="最大值"), |
| opts.MarkPointItem(type_="min", name="最小值"), |
| ] |
| ),markline_opts=opts.MarkLineOpts( |
| data=[ |
| opts.MarkLineItem(type_="min", name="最小值"), |
| opts.MarkLineItem(type_="max", name="最大值") |
| ] |
| )) |
| .set_global_opts(title_opts=opts.TitleOpts(title="Bar-参数使用例子"), toolbox_opts=opts.ToolboxOpts(),yaxis_opts=opts.AxisOpts(position="right",name="Y轴"),datazoom_opts=opts.DataZoomOpts(),) |
| |
| ) |
| |
| return c |
| |
| bar_border_radius().render() |
| |
24.1分钟学会画 pairplot 图
使用 seaborn 绘制 sepal_length, petal_length 两个特征间的关系矩阵:
| from sklearn.datasets import load_iris |
| import matplotlib.pyplot as plt |
| import seaborn as sns |
| from sklearn import tree |
| |
| sns.set(style="ticks") |
| |
| df02 = df.iloc[:,[0,2,4]] |
| sns.pairplot(df02) |
| plt.show() |
设置颜色多显:
| sns.pairplot(df02, hue="species") |
| plt.show() |
绘制所有特征散点矩阵:
| sns.pairplot(df, hue="species") |
| plt.show() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~