python 数据可视化利器 plus

ESP32蓝牙传感器数据可视化:OLED、Python与手机App三种方案详解 物联网应用中,传感器数据采集与可视化是核心环节。通过I2C总线协议,微控制器可以高效读取加速度计等传感器数据。蓝牙低功耗技术则提供了低功耗、短距离的无线通信能力,是实现设备间无线数据传输的关键。结合ESP32开发板集成的蓝牙模块,可以构建灵活的无线传感器网络,将采集的数据实时传输到不同终端进行显示和分析,极大提升了项目的便携性和应用范围。本文以ESP32和KX132加速度计为例,详细解析了通过蓝牙传输数据并在OLED屏幕、Python动态图表及手机App上实现可视化的三种完整方案,涵盖了硬件连接、代码实现与 阅读详情

本文首发于公众号「zone7」,关注获取最新推文!

image

概述

前言

更新:上一篇文章《python 数据可视化利器》中,我写了 bokeh、pyecharts 的用法,但是有一个挺强大的库 plotly 没写,主要是我看到它的教程都是在 jupyter notebooks 中使用,说来也奇怪,硬是找不到如何本地使用(就是本地输出 html 文件),所以不敢写出来。现在已经找到方法了,这里我就在原文的基础上增加了 plotly 的部分教程。

前段时间有读者向我反映,想看看数据可视化方面的文章,这不?现在就开始写了,如果你想看哪些方面的文章,可以通过留言或者后台告诉我。数据可视化的第三方库挺多的,这里我主要推荐两个,分别是 bokeh、pyecharts。如果我的文章对你有帮助,欢迎关注、点赞、转发,这样我会更有动力做原创分享。

推荐

数据可视化的库有挺多的,这里推荐几个比较常用的:

plotly

plotly 文档地址(https://plot.ly/python/#financial-charts)

使用方式:

plotly 有 online 和 offline 两种方式,这里只介绍 offline 的。

这是 plotly 官方教程的一部分

import plotly.plotly as py
import numpy as np
data = [dict(
    visible=False,
    line=dict(color='#00CED1', width=6), # 配置线宽和颜色
    name='? = ' + str(step),
    x=np.arange(0, 10, 0.01), # x 轴参数
    y=np.sin(step * np.arange(0, 10, 0.01))) for step in np.arange(0, 5, 0.1)] # y 轴参数
data[10]['visible'] = True
py.iplot(data, filename='Single Sine Wave')

只要将最后一行中的

py.iplot

替换为下面代码

py.offline.plot

便可以运行。

漏斗图

这个图代码太长了,就不 po 出来了。

Basic Box Plot

好吧,不知道怎么翻译,直接用原名。

import plotly.plotly
import plotly.graph_objs as go
import numpy as np
y0 = np.random.randn(50)-1
y1 = np.random.randn(50)+1

trace0 = go.Box(
    y=y0
)
trace1 = go.Box(
    y=y1
)
data = [trace0, trace1]
plotly.offline.plot(data)
Wind Rose Chart

好吧,不知道怎么翻译,直接用原名。

import plotly.graph_objs as go

trace1 = go.Barpolar(
    r=[77.5, 72.5, 70.0, 45.0, 22.5, 42.5, 40.0, 62.5],
    text=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
    name='11-14 m/s',
    marker=dict(
        color='rgb(106,81,163)'
    )
)
trace2 = go.Barpolar(
    r=[57.49999999999999, 50.0, 45.0, 35.0, 20.0, 22.5, 37.5, 55.00000000000001],
    text=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'], # 鼠标浮动标签文字描述
    name='8-11 m/s',
    marker=dict(
        color='rgb(158,154,200)'
    )
)
trace3 = go.Barpolar(
    r=[40.0, 30.0, 30.0, 35.0, 7.5, 7.5, 32.5, 40.0],
    text=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
    name='5-8 m/s',
    marker=dict(
        color='rgb(203,201,226)'
    )
)
trace4 = go.Barpolar(
    r=[20.0, 7.5, 15.0, 22.5, 2.5, 2.5, 12.5, 22.5],
    text=['North', 'N-E', 'East', 'S-E', 'South', 'S-W', 'West', 'N-W'],
    name='< 5 m/s',
    marker=dict(
        color='rgb(242,240,247)'
    )
)
data = [trace1, trace2, trace3, trace4]
layout = go.Layout(
    title='Wind Speed Distribution in Laurel, NE',
    font=dict(
        size=16
    ),
    legend=dict(
        font=dict(
            size=16
        )
    ),
    radialaxis=dict(
        ticksuffix='%'
    ),
    orientation=270
)
fig = go.Figure(data=data, layout=layout)
plotly.offline.plot(fig, filename='polar-area-chart')
Basic Ternary Plot with Markers

篇幅有点长,这里就不 po 代码了。

bokeh

这里展示一下常用的图表和比较抢眼的图表,详细的文档可查看(https://bokeh.pydata.org/en/latest/docs/user_guide/categorical.html)

条形图

这配色看着还挺舒服的,比 pyecharts 条形图的配色好看一点。
条形图

from bokeh.io import show, output_file
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral6
from bokeh.plotting import figure
output_file("colormapped_bars.html")#  配置输出文件名
fruits = ['Apples', '魅族', 'OPPO', 'VIVO', '小米', '华为'] # 数据
counts = [5, 3, 4, 2, 4, 6] # 数据
source = ColumnDataSource(data=dict(fruits=fruits, counts=counts, color=Spectral6))
p = figure(x_range=fruits, y_range=(0,9), plot_height=250, title="Fruit Counts",
           toolbar_location=None, tools="")# 条形图配置项
p.vbar(x='fruits', top='counts', width=0.9, color='color', legend="fruits", source=source)
p.xgrid.grid_line_color = None # 配置网格线颜色
p.legend.orientation = "horizontal" # 图表方向为水平方向
p.legend.location = "top_center"
show(p) # 展示图表
年度条形图

可以对比不同时间点的量。
年度条形图

from bokeh.io import show, output_file
from bokeh.models import ColumnDataSource, FactorRange
from bokeh.plotting import figure
output_file("bars.html") # 输出文件名
fruits = ['Apple', '魅族', 'OPPO', 'VIVO', '小米', '华为'] # 参数
years = ['2015', '2016', '2017'] # 参数
data = {'fruits': fruits,
        '2015': [2, 1, 4, 3, 2, 4],
        '2016': [5, 3, 3, 2, 4, 6],
        '2017': [3, 2, 4, 4, 5, 3]}
x = [(fruit, year) for fruit in fruits for year in years]
counts = sum(zip(data['2015'], data['2016'], data['2017']), ())  
source = ColumnDataSource(data=dict(x=x, counts=counts))
p = figure(x_range=FactorRange(*x), plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")
p.vbar(x='x', top='counts', width=0.9, source=source)
p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1
p.xgrid.grid_line_color = None
show(p)
饼图

饼图

from collections import Counter
from math import pi
import pandas as pd
from bokeh.io import output_file, show
from bokeh.palettes import Category20c
from bokeh.plotting import figure
from bokeh.transform import cumsum
output_file("pie.html")
x = Counter({
    '中国': 157,
    '美国': 93,
    '日本': 89,
    '巴西': 63,
    '德国': 44,
    '印度': 42,
    '意大利': 40,
    '澳大利亚': 35,
    '法国': 31,
    '西班牙': 29
})
data = pd.DataFrame.from_dict(dict(x), orient='index').reset_index().rename(index=str, columns={0:'value', 'index':'country'})
data['angle'] = data['value']/sum(x.values()) * 2*pi
data['color'] = Category20c[len(x)]
p = figure(plot_height=350, title="Pie Chart", toolbar_location=None,
           tools="hover", tooltips="@country: @value")
p.wedge(x=0, y=1, radius=0.4,
        start_angle=cumsum('angle', include_zero=True), end_angle=cumsum('angle'),
        line_color="white", fill_color='color', legend='country', source=data)
p.axis.axis_label=None
p.axis.visible=False
p.grid.grid_line_color = None
show(p)                                                                                                          
条形图

年度水果进出口

from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource
from bokeh.palettes import GnBu3, OrRd3
from bokeh.plotting import figure
output_file("stacked_split.html")
fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
exports = {'fruits': fruits,
           '2015': [2, 1, 4, 3, 2, 4],
           '2016': [5, 3, 4, 2, 4, 6],
           '2017': [3, 2, 4, 4, 5, 3]}
imports = {'fruits': fruits,
           '2015': [-1, 0, -1, -3, -2, -1],
           '2016': [-2, -1, -3, -1, -2, -2],
           '2017': [-1, -2, -1, 0, -2, -2]}
p = figure(y_range=fruits, plot_height=250, x_range=(-16, 16), title="Fruit import/export, by year",
           toolbar_location=None)
p.hbar_stack(years, y='fruits', height=0.9, color=GnBu3, source=ColumnDataSource(exports),
             legend=["%s exports" % x for x in years])
p.hbar_stack(years, y='fruits', height=0.9, color=OrRd3, source=ColumnDataSource(imports),
             legend=["%s imports" % x for x in years])
p.y_range.range_padding = 0.1
p.ygrid.grid_line_color = None
p.legend.location = "top_left"
p.axis.minor_tick_line_color = None
p.outline_line_color = None
show(p)
散点图

散点图

from bokeh.plotting import figure, output_file, show
output_file("line.html")
p = figure(plot_width=400, plot_height=400)
p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=20, color="navy", alpha=0.5)
show(p)
六边形图

这两天,马蜂窝刚被发现数据造假,这不,与马蜂窝应应景。
六边形图

import numpy as np
from bokeh.io import output_file, show
from bokeh.plotting import figure
from bokeh.util.hex import axial_to_cartesian
output_file("hex_coords.html")
q = np.array([0, 0, 0, -1, -1, 1, 1])
r = np.array([0, -1, 1, 0, 1, -1, 0])
p = figure(plot_width=400, plot_height=400, toolbar_location=None) # 
p.grid.visible = False # 配置网格是否可见
p.hex_tile(q, r, size=1, fill_color=["firebrick"] * 3 + ["navy"] * 4,
           line_color="white", alpha=0.5)
x, y = axial_to_cartesian(q, r, 1, "pointytop")
p.text(x, y, text=["(%d, %d)" % (q, r) for (q, r) in zip(q, r)],
       text_baseline="middle", text_align="center")
show(p)
环比条形图

这个实现挺厉害的,看了一眼就吸引了我。我在代码中都做了一些注释,希望对你理解有帮助。注:圆心为正中央,即直角坐标系中标签为(0,0)的地方。
环比条形图

from collections import OrderedDict
from math import log, sqrt
import numpy as np
import pandas as pd
from six.moves import cStringIO as StringIO
from bokeh.plotting import figure, show, output_file

antibiotics = """
bacteria,                        penicillin, streptomycin, neomycin, gram
结核分枝杆菌,                      800,        5,            2,        negative
沙门氏菌,                         10,         0.8,          0.09,     negative
变形杆菌,                         3,          0.1,          0.1,      negative
肺炎克雷伯氏菌,                    850,        1.2,          1,        negative
布鲁氏菌,                         1,          2,            0.02,     negative
铜绿假单胞菌,                     850,        2,            0.4,      negative
大肠杆菌,                        100,        0.4,          0.1,      negative
产气杆菌,                         870,        1,            1.6,      negative
白色葡萄球菌,                     0.007,      0.1,          0.001,    positive
溶血性链球菌,                     0.001,      14,           10,       positive
草绿色链球菌,                     0.005,      10,           40,       positive
肺炎双球菌,                       0.005,      11,           10,       positive
"""

drug_color = OrderedDict([# 配置中间标签名称与颜色
    ("盘尼西林", "#0d3362"),
    ("链霉素", "#c64737"),
    ("新霉素", "black"),
])
gram_color = {
    "positive": "#aeaeb8",
    "negative": "#e69584",
}
# 读取数据
df = pd.read_csv(StringIO(antibiotics),
                 skiprows=1,
                 skipinitialspace=True,
                 engine='python')
width = 800
height = 800
inner_radius = 90
outer_radius = 300 - 10

minr = sqrt(log(.001 * 1E4))
maxr = sqrt(log(1000 * 1E4))
a = (outer_radius - inner_radius) / (minr - maxr)
b = inner_radius - a * maxr


def rad(mic):
    return a * np.sqrt(np.log(mic * 1E4)) + b
big_angle = 2.0 * np.pi / (len(df) + 1)
small_angle = big_angle / 7
# 整体配置
p = figure(plot_width=width, plot_height=height, title="",
           x_axis_type=None, y_axis_type=None,
           x_range=(-420, 420), y_range=(-420, 420),
           min_border=0, outline_line_color="black",
           background_fill_color="#f0e1d2")
p.xgrid.grid_line_color = None
p.ygrid.grid_line_color = None
# annular wedges
angles = np.pi / 2 - big_angle / 2 - df.index.to_series() * big_angle  #计算角度
colors = [gram_color[gram] for gram in df.gram] # 配置颜色
p.annular_wedge(
    0, 0, inner_radius, outer_radius, -big_angle + angles, angles, color=colors,
)

# small wedges
p.annular_wedge(0, 0, inner_radius, rad(df.penicillin),
                -big_angle + angles + 5 * small_angle, -big_angle + angles + 6 * small_angle,
                color=drug_color['盘尼西林'])
p.annular_wedge(0, 0, inner_radius, rad(df.streptomycin),
                -big_angle + angles + 3 * small_angle, -big_angle + angles + 4 * small_angle,
                color=drug_color['链霉素'])
p.annular_wedge(0, 0, inner_radius, rad(df.neomycin),
                -big_angle + angles + 1 * small_angle, -big_angle + angles + 2 * small_angle,
                color=drug_color['新霉素'])
# 绘制大圆和标签
labels = np.power(10.0, np.arange(-3, 4))
radii = a * np.sqrt(np.log(labels * 1E4)) + b
p.circle(0, 0, radius=radii, fill_color=None, line_color="white")
p.text(0, radii[:-1], [str(r) for r in labels[:-1]],
       text_font_size="8pt", text_align="center", text_baseline="middle")
# 半径
p.annular_wedge(0, 0, inner_radius - 10, outer_radius + 10,
                -big_angle + angles, -big_angle + angles, color="black")
# 细菌标签
xr = radii[0] * np.cos(np.array(-big_angle / 2 + angles))
yr = radii[0] * np.sin(np.array(-big_angle / 2 + angles))
label_angle = np.array(-big_angle / 2 + angles)
label_angle[label_angle < -np.pi / 2] += np.pi  # easier to read labels on the left side
# 绘制各个细菌的名字
p.text(xr, yr, df.bacteria, angle=label_angle,
       text_font_size="9pt", text_align="center", text_baseline="middle")
# 绘制圆形,其中数字分别为 x 轴与 y 轴标签
p.circle([-40, -40], [-370, -390], color=list(gram_color.values()), radius=5)
# 绘制文字
p.text([-30, -30], [-370, -390], text=["Gram-" + gr for gr in gram_color.keys()],
       text_font_size="7pt", text_align="left", text_baseline="middle")
# 绘制矩形,中间标签部分。其中 -40,-40,-40 为三个矩形的 x 轴坐标。18,0,-18 为三个矩形的 y 轴坐标
p.rect([-40, -40, -40], [18, 0, -18], width=30, height=13,
       color=list(drug_color.values()))
# 配置中间标签文字、文字大小、文字对齐方式
p.text([-15, -15, -15], [18, 0, -18], text=list(drug_color),
       text_font_size="9pt", text_align="left", text_baseline="middle")
output_file("burtin.html", title="burtin.py example")
show(p)
元素周期表

元素周期表,这个实现好牛逼啊,距离初三刚开始学化学已经很遥远了,想当年我还是化学课代表呢!由于基本用不到化学了,这里就不实现了。
元素周期表
真实状态

pyecharts

pyecharts 也是一个比较常用的数据可视化库,用得也是比较多的了,是百度 echarts 库的 python 支持。这里也展示一下常用的图表。文档地址为(http://pyecharts.org/#/zh-cn/prepare?id=安装-pyecharts)

条形图

条形图

from pyecharts import Bar
bar = Bar("我的第一个图表", "这里是副标题")
bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])
# bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用
bar.render()    # 生成本地 HTML 文件
散点图

散点图

from pyecharts import Polar
import random
data_1 = [(10, random.randint(1, 100)) for i in range(300)]
data_2 = [(11, random.randint(1, 100)) for i in range(300)]
polar = Polar("极坐标系-散点图示例", width=1200, height=600)
polar.add("", data_1, type='scatter')
polar.add("", data_2, type='scatter')
polar.render()
饼图

饼图

import random
from pyecharts import Pie
attr = ['A', 'B', 'C', 'D', 'E', 'F']
pie = Pie("饼图示例", width=1000, height=600)
pie.add(
    "",
    attr,
    [random.randint(0, 100) for _ in range(6)],
    radius=[50, 55],
    center=[25, 50],
    is_random=True,
)
pie.add(
    "",
    attr,
    [random.randint(20, 100) for _ in range(6)],
    radius=[0, 45],
    center=[25, 50],
    rosetype="area",
)
pie.add(
    "",
    attr,
    [random.randint(0, 100) for _ in range(6)],
    radius=[50, 55],
    center=[65, 50],
    is_random=True,
)
pie.add(
    "",
    attr,
    [random.randint(20, 100) for _ in range(6)],
    radius=[0, 45],
    center=[65, 50],
    rosetype="radius",
)
pie.render()
词云

这个是我在前面的文章中用到的图片实例,这里就不 po 具体数据了。
词云

from pyecharts import WordCloud
name = ['Sam S Club'] # 词条
value = [10000] # 权重
wordcloud = WordCloud(width=1300, height=620)
wordcloud.add("", name, value, word_size_range=[20, 100])
wordcloud.render()
树图

这个是我在前面的文章中用到的图片实例,这里就不 po 具体数据了。
树图

from pyecharts import TreeMap
data =   [ # 键值对数据结构
      {
          value: 1212,    # 数值
          # 子节点
          children: [
              {
                  # 子节点数值
                  value: 2323,
                  # 子节点名
                  name: 'description of this node',
                  children: [...],
              },
              {
                  value: 4545,
                  name: 'description of this node',
                  children: [
                      {
                          value: 5656,
                          name: 'description of this node',
                          children: [...]
                      },
                      ...
                  ]
              }
          ]
      },
      ...
  ]
treemap = TreeMap(title, width=1200, height=600) # 设置标题与宽高
treemap.add("深圳", data, is_label_show=True, label_pos='inside', label_text_size=19)
treemap.render()
地图

地图

from pyecharts import Map

value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6]
attr = [
    "福建", "山东", "北京", "上海", "甘肃", "新疆", "河南", "广西", "西藏"
    ]
map = Map("Map 结合 VisualMap 示例", width=1200, height=600)
map.add(
    "",
    attr,
    value,
    maptype="china",
    is_visualmap=True,
    visual_text_color="#000",
)
map.render()
3D 散点图

image

from pyecharts import Scatter3D
import random
data = [
    [random.randint(0, 100),
    random.randint(0, 100),
    random.randint(0, 100)] for _ in range(80)
]
range_color = [
    '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
    '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
scatter3D = Scatter3D("3D 散点图示例", width=1200, height=600) # 配置宽高
scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color)  # 设置颜色等
scatter3D.render() # 渲染

后记

大概介绍就是这样了,三个库的功能都挺强大的,bokeh 的中文资料会少一点,如果阅读英文有点难度,还是建议使用 pyecharts 就好。总体也不是很难,按照文档来修改数据都能够直接上手使用。主要是多练习。

本文首发于公众号【zone7】,关注获取最新推文。

PyCharm插件配置指南:打造高效美观的Python开发环境 在软件开发中,集成开发环境(IDE)是程序员的核心工具,其配置优化直接影响开发效率和体验。PyCharm作为主流的Python IDE,通过插件生态可以深度定制。插件机制基于扩展点设计,允许开发者按需增强功能,其技术价值在于将通用工具转化为个性化工作台,减少认知负荷,提升工作流顺畅度。在实际应用场景中,数据分析师可通过CSV插件快速预览数据,利用Rainbow Brackets清晰展示代码结构,结合Material Theme UI等主题插件打造舒适视觉环境,从而构建出既高效又符合个人审美的专属开发工作站。 阅读详情

相关推荐

计算机毕业设计实战:Java/Python/PHP/Node.js构建个人记账系统

你是不是也经历过这样的时刻:毕业设计选题像一座大山横在面前,看着“计算机毕业设计最新万套合集”这样的标题,点进去却发现要么是陈年老项目,要么是代码跑不通,要么是文档缺失,最后只能对着“白漂福利”和“V领源码”的承诺苦笑? 更让人头疼的是,当你终于选定一个方向,比如“个人记账系统”,却发现从环境配置开始就步步惊心。Java项目告诉你“源发行版17需要目标发行版17”,Python打包exe时内存溢出,PHP表单验证码死活不显示,Node.js环境变量配置报错“无法识别为cmdlet”……这些看似琐碎的技术卡点

weixin_34347651的博客 542

python绘制饼图的如何设置高度宽度_python - 如何使用Bokeh创建饼图? - 堆栈内存溢出...

下面的答案已经过时了。 Donut函数是很久以前弃用和删除的旧bokeh.charts API的一部分。 对于任何现代版本的Bokeh(例如0.13或更新版本),您可以使用楔形字形创建饼图,如下所示:from math import piimport pandas as pdfrom bokeh.io import output_file, showfrom bokeh.palettes im...

weixin_39614754的博客 360

2026年十大Codex插件全解析:从代码生成到自动化测试的AI开发实战

AI代码生成模型正深刻改变软件开发流程,其核心原理是基于大规模预训练语言模型,通过理解自然语言指令生成高质量代码片段。这项技术的核心价值在于将开发者从重复性编码任务中解放,显著提升开发效率与代码一致性。在实际工程中,AI编程助手的能力通过丰富的插件生态得以扩展,覆盖代码审查、文档生成、自动化测试等关键场景。例如,UnitTest Generator等插件能自动生成单元测试用例,而Code Review Assistant可集成至CI/CD流水线进行自动化代码审查。本文聚焦于Codex这一代表性模型的插件生态

weixin_34054931的博客 443

Python使用bokeh制作条形图分类对比

报错: AttributeError: unexpected attribute 'legend_field' to VBar, possible attributes are bottom, fill_alpha... bokeh在低版本中1.34中使用legend和高版本是不一样的,在2.4.X中可以用legend_field='label' ,但是在低版本中需要使用legend='label' 源代码: import csv from bokeh.palettes import d3

大宇进阶之路的博客 2326

AWD攻防赛环境深度定制:从Docker镜像构建到计分板美化实战

Docker容器化技术通过将应用及其依赖打包成标准化的镜像,实现了环境的一致性与快速部署,其核心原理在于利用操作系统级虚拟化提供轻量级的隔离环境。在网络安全攻防演练领域,这项技术为构建可复现、可定制的漏洞靶场提供了强大支撑。AWD(Attack With Defense)攻防赛作为流行的实战演练形式,其比赛环境的灵活性与专业性直接影响训练和竞赛效果。通过自定义Docker镜像,可以精确控制靶机的操作系统、软件版本及漏洞细节,实现漏洞环境的精准封装与复用。同时,结合实时数据采集与WebSocket通信技术,能

weixin_33924770的博客 369

是德频谱分析仪相位噪声测量实战指南:从原理到精准操作

本文详细介绍了是德频谱分析仪在相位噪声测量中的实战操作指南,从基础概念到高级技巧全面解析。通过5G基站时钟测量等实际案例,展示如何利用是德N9030B等设备精准测量相位噪声,并分享设备预热、参数设置、环境干扰排除等关键操作要点,帮助工程师提升测量精度和效率。

jenkins8butler的博客 230

Python进行数据可视化的9种常见方法,总有一种是你要用的

Python进行数据可视化的9种常见方法,总有一种是你要用的

Python单行客的博客 1万+

Aruco标签定位、测距、三维位置估算 opencv应用

摄像头要一开始对准aruco标签才开始运行。+ 相机标定文件(参考我的上篇文章)+ aruco标签6*6。

dgut_guangdian的博客 4222

用Python进行数据可视化的9种常用方法,易上手超实用 !!

Python数据可视化常用方法

xiaolinyui的博客 1万+

从Google到LLVM:5种主流clang-format预设风格横向对比(含代码对比图)

本文横向对比了LLVM、Google、Chromium、Mozilla和WebKit五种主流的clang-format预设代码风格。通过同一段C++代码的格式化效果对比图,直观展示了它们在指针对齐、大括号换行、缩进等关键细节上的差异,并提供了基于团队背景与项目基因的选型决策指南。

weixin_28828243的博客 444

Altium Concord Pro 的应用范围,安装,和使用范围

Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁

hanzhaos的博客 1121

一图胜千言!详解Python数据可视化!

描述性分析(descriptive analytics)是任何分析生命周期的数据科学项目或特定研究的核心组成部分之一。数据聚合(aggregation)、汇总(summarization)和可视化(visualization)是支撑数据分析领域的主要支柱。从传统商业智能(Business Intelligence)开始,甚至到如今人工智能时代,数据可视化都是一个强有力的工具;由于其能有效抽取正确的信息,同时清楚容易地理解和解释结果,可视化被业界组织广泛使用。

优快云_430422的博客 7667

Microsoft AI SDK 与 SAP ABAP:让企业级 AI 能力触手可及的深度整合指南

借助 Microsoft AI SDK,ABAP 开发者无需跳出熟悉的事务码与数据字典,就能把 GPT‑4 的强大语言理解与生成能力深度植入采购、销售、财务等核心业务流程。只要掌握“初始化 SDK → 构造 Prompt → 解析输出”这一范式,未来无论 Azure OpenAI、OpenAI 还是本地化 LLM,都能在同一套代码骨架内快速切换,实现真正的“AI 即服务”。现在,就让我们在下一行 ABAP 里拥抱智能未来。参考链接均于 2025‑07‑22 提取,推荐读者结合实际版本进一步验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 434

**时间线可视化利器:Timeline Plus**

时间线可视化利器:Timeline Plus 在数据可视化领域,一款高效且直观的工具是每个开发者梦寐以求的宝藏。今天,我们将聚焦于一款名为Timeline Plus的强大库,它源自vis.js中的Timeline模块,并由维护者Yota Berk进行了全面的升级和独立开发。让我们深入探索其魅力所在,看看它为何能够成为你的下一次项目中的首选。 一、项目介绍 Timeline Plus最初基于vis....

gitblog_00083的博客 426

特殊通信领域场景应用:基于Simulink的数字预失真(DPD)算法仿真建模示例

增益压缩:高功率输入时输出信号的增益下降。相位失真:输入信号的相位随功率变化而改变。带外干扰:非线性失真会引入额外的频谱分量,影响邻道信号。多项式模型:用多项式拟合功率放大器的非线性特性。查找表(LUT):通过离线训练生成预失真映射表。自适应算法:实时调整预失真参数以动态补偿失真。发送端:生成随机比特流并调制为射频信号。预失真模块:对输入信号进行预失真处理。功率放大器模块:模拟非线性失真。接收端:解调信号并评估误码率(BER)。

xiaoheshang_123的博客 274

ardupilot BMI088加速度陀螺仪学习

本节主要记录ardupilot 中BMI088传感器的学习过程,欢迎批评指正。BMI088是一款高性能6轴惯性传感器,由16位数字三轴±24g加速度计和16位数字三轴±2000°/ s陀螺仪组成。 BMI088允许高精度测量方向和沿三个正交轴的运动检测。BMI088具有高振动鲁棒性和3 x 4.5 x0.95mm³的小尺寸,是用于无人机和机器人应用等恶劣环境的高性能IMU中的独特产品。 BMI088专门设计用于有效抑制由于PCB上的共振或整个系统的结构而可能发生的振动。 除了高振动稳定性外,BMI088的出

陌城烟雨 2056

毕业设计实战:基于Spring Boot与Vue的公司人员管理系统开发指南

信息管理系统(MIS)是软件工程领域的经典应用,其核心在于通过数据库技术对业务实体进行增删改查(CRUD)操作,并实现业务流程的数字化管理。这类系统通常采用分层架构,将数据访问、业务逻辑与用户界面分离,以提高代码的可维护性和可扩展性。在技术价值上,一个设计良好的MIS不仅能提升管理效率,更是开发者理解软件工程全流程的绝佳实践。其应用场景广泛,从企业资源规划到学校教务管理,都离不开此类系统的支撑。本文以公司人员管理系统为例,深入剖析如何运用Spring Boot与Vue.js等技术栈,构建一个包含权限管理(R

weixin_30947043的博客 364

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot校园二手交易平台:半天快速上手与核心实现剖析

在Web开发领域,MVC架构是构建分层应用的基础设计模式,它将应用逻辑清晰地分离为模型、视图和控制器,提升了代码的可维护性和可测试性。其核心原理在于通过控制器接收请求、模型处理业务与数据、视图渲染响应,实现关注点分离。这一模式的技术价值在于为开发者提供了标准化的开发范式,尤其适用于业务逻辑复杂的应用,如电商平台、内容管理系统等。在校园开发场景中,结合Spring Boot框架和MyBatis-Plus等主流技术栈,可以快速构建出功能完整的项目原型。本文以校园二手物品交易平台为例,深入解析如何利用Spring

weixin_33831196的博客 391

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python进阶教程:数据分析入门(NumPy与Pandas)

本篇介绍了 NumPy 数组运算和 Pandas 的 Series、DataFrame、数据清洗、分组聚合,并用销售数据分析串联实战。下一篇将介绍Web 开发入门(Flask),敬请期待!

CJLU_WSJ的博客 704

Python开发环境搭建指南:Anaconda与PyCharm协同配置详解

在Python开发中,虚拟环境和集成开发环境(IDE)是提升开发效率和项目可维护性的核心工具。虚拟环境通过隔离项目依赖,解决了不同项目间库版本冲突的问题,而专业的IDE则提供了代码智能提示、调试和项目管理等高效开发功能。Anaconda(或Miniconda)作为流行的Python发行版和环境管理器,其内置的conda工具能够便捷地创建和管理虚拟环境。PyCharm作为强大的Python IDE,需要正确配置以调用指定的虚拟环境解释器。本文以Anaconda和PyCharm的协同配置为例,详细解析了从环境创

weixin_33788244的博客 290

建筑行业转型技术岗:从零到一的前端与数据分析学习路径

职业转型是许多从业者在面临行业周期变化或个人发展瓶颈时的关键选择。其核心原理在于将原有行业的经验能力(如项目管理、逻辑思维)迁移至新的技术领域,通过系统化学习构建新的核心竞争力。这一过程的技术价值在于,它不仅能帮助个人进入高增长赛道,更能通过掌握编程、数据分析等通用技能,提升解决复杂问题的能力。在应用场景上,传统行业从业者向互联网技术岗位转型已成为一种可行路径,特别是转向前端开发、数据分析等方向。本文聚焦于建筑行业从业者的转型实战,详细拆解了如何从零开始,通过3-6个月的系统学习,掌握前端开发或Python

weixin_30572613的博客 362
上一篇: Python 数据库骚操作 -- MongoDB
下一篇: 推荐几款提高体验与效率的 Chrome 插件神器
zone7_
博客等级 码龄10年 144粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值