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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pyecharts源码解读(12)图表类包charts之chart模块:常用图表基类Chart、直角坐标系图表基类RectChart、3D图表基类Chart3D

發布時間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pyecharts源码解读(12)图表类包charts之chart模块:常用图表基类Chart、直角坐标系图表基类RectChart、3D图表基类Chart3D 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當前pyecharts的版本為1.9.0。

pyecharts/charts/chart.py模塊結構

pyecharts/charts/chart.py模塊主要元素為4個類:

  • Chart類:除復合圖表之外所有常用圖表類的基類,它的父類為Base類。
  • RectChart類:直角坐標系圖表類的基類,父類為Chart類。
  • Chart3D類:3D圖表類的基類,父類為Chart類。
  • ThreeAxisChart類:三維坐標系圖表基類,父類為Chart3D類。

pyecharts常用圖表類的繼承關系

Chart類

Chart類是除復合圖表之外所有常用圖表類的基類,它的父類為Base類。
Chart類的簽名為class Chart(init_opts)。Chart類的參數主要繼承自Base類。Chart類的方法如下:

  • set_global_opts:設置全局配置。
  • set_series_opts:設置系列配置。
  • add_dataset:添加數據集配置。
  • set_colors:設置顏色集。

這些方法的原理相似,都是將接收的參數更新到options屬性中(ECharts配置項)。

Chart類源碼

class Chart(Base):def __init__(self, init_opts: types.Init = opts.InitOpts()):if isinstance(init_opts, dict):temp_opts = opts.InitOpts()temp_opts.update(**init_opts)init_opts = temp_optssuper().__init__(init_opts=init_opts)self.colors = ("#c23531 #2f4554 #61a0a8 #d48265 #749f83 #ca8622 #bda29a #6e7074 ""#546570 #c4ccd3 #f05b72 #ef5b9c #f47920 #905a3d #fab27b #2a5caa ""#444693 #726930 #b2d235 #6d8346 #ac6767 #1d953f #6950a1 #918597").split()if init_opts.opts.get("theme") == ThemeType.WHITE:self.options.update(color=self.colors)self.options.update(series=[],legend=[{"data": [], "selected": dict()}],tooltip=opts.TooltipOpts().opts,)self._chart_type: Optional[str] = Nonedef set_colors(self, colors: Sequence[str]):self.options.update(color=colors)return selfdef set_series_opts(self,label_opts: types.Label = None,linestyle_opts: types.LineStyle = None,splitline_opts: types.SplitLine = None,areastyle_opts: types.AreaStyle = None,axisline_opts: types.AxisLine = None,markpoint_opts: types.MarkPoint = None,markline_opts: types.MarkLine = None,markarea_opts: types.MarkArea = None,effect_opts: types.Effect = opts.EffectOpts(),tooltip_opts: types.Tooltip = None,itemstyle_opts: types.ItemStyle = None,**kwargs,):for s in self.options.get("series"):if label_opts:s.update(label=label_opts)if linestyle_opts:s.update(lineStyle=linestyle_opts)if splitline_opts:s.update(splitLine=splitline_opts)if areastyle_opts:s.update(areaStyle=areastyle_opts)if axisline_opts:s.update(axisLine=axisline_opts)if markpoint_opts:s.update(markPoint=markpoint_opts)if markline_opts:s.update(markLine=markline_opts)if markarea_opts:s.update(markArea=markarea_opts)if effect_opts:s.update(rippleEffect=effect_opts)if tooltip_opts:s.update(tooltip=tooltip_opts)if itemstyle_opts:s.update(itemStyle=itemstyle_opts)if len(kwargs) > 0:s.update(kwargs)return selfdef _append_legend(self, name, is_selected):self.options.get("legend")[0].get("data").append(name)self.options.get("legend")[0].get("selected").update({name: is_selected})def _append_color(self, color: Optional[str]):if color:self.colors = [color] + self.colorsif self.theme == ThemeType.WHITE:self.options.update(color=self.colors)def set_global_opts(self,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,):if tooltip_opts is None:tooltip_opts = opts.TooltipOpts(formatter=ToolTipFormatterType.get(self._chart_type, None))self.options.update(title=title_opts,toolbox=toolbox_opts,tooltip=tooltip_opts,visualMap=visualmap_opts,dataZoom=datazoom_opts,graphic=graphic_opts,axisPointer=axispointer_opts,)if brush_opts is not None:self.options.update(brush=brush_opts)if isinstance(legend_opts, opts.LegendOpts):legend_opts = legend_opts.optsfor _s in self.options["legend"]:_s.update(legend_opts)if xaxis_opts and self.options.get("xAxis", None):if isinstance(xaxis_opts, opts.AxisOpts):xaxis_opts = xaxis_opts.optsself.options["xAxis"][0].update(xaxis_opts)if yaxis_opts and self.options.get("yAxis", None):if isinstance(yaxis_opts, opts.AxisOpts):yaxis_opts = yaxis_opts.optsself.options["yAxis"][0].update(yaxis_opts)return selfdef add_dataset(self,source: types.Union[types.Sequence, types.JSFunc] = None,dimensions: types.Optional[types.Sequence] = None,source_header: types.Optional[bool] = None,):self.options.update(dataset={"source": source,"dimensions": dimensions,"sourceHeader": source_header,})return self

RectChart類

RectChart類是直角坐標系圖表類的基類,父類為Chart類。
RectChart類的簽名為class RectChart(init_opts)。Chart類的參數主要繼承自Base類。Chart類的方法如下:

  • extend_axis:擴展 X/Y 軸。

    def extend_axis(# 擴展 X 坐標軸數據項xaxis_data: Sequence = None,# 擴展 X 坐標軸配置項,參考 `global_options.AxisOpts`xaxis: Union[opts.AxisOpts, dict, None] = None,# 新增 Y 坐標軸配置項,參考 `global_options.AxisOpts`yaxis: Union[opts.AxisOpts, dict, None] = None, )
  • add_xaxis:新增 X 軸數據。

    def add_xaxis(# X 軸數據項xaxis_data: Sequence )
  • reversal_axis:翻轉xy軸。

  • overlap:疊加多個基本圖表類實例。

    def overlap(chart: Base )

這些方法的原理相似,都是將接收的參數更新到options屬性中(ECharts配置項)。

RectChart類源碼

class RectChart(Chart):def __init__(self, init_opts: types.Init = opts.InitOpts()):super().__init__(init_opts=init_opts)self.options.update(xAxis=[opts.AxisOpts().opts], yAxis=[opts.AxisOpts().opts])def extend_axis(self,xaxis_data: Sequence = None,xaxis: types.Axis = None,yaxis: types.Axis = None,):if xaxis is not None:if isinstance(xaxis, opts.AxisOpts):xaxis = xaxis.optsxaxis.update(data=xaxis_data)self.options["xAxis"].append(xaxis)if yaxis is not None:if isinstance(yaxis, opts.AxisOpts):yaxis = yaxis.optsself.options["yAxis"].append(yaxis)return selfdef add_xaxis(self, xaxis_data: Sequence):self.options["xAxis"][0].update(data=xaxis_data)self._xaxis_data = xaxis_datareturn selfdef reversal_axis(self):self.options["yAxis"][0]["data"] = self._xaxis_dataself.options["xAxis"][0]["data"] = Nonereturn selfdef overlap(self, chart: Base):self.options.get("legend")[0].get("data").extend(chart.options.get("legend")[0].get("data"))self.options.get("legend")[0].get("selected").update(chart.options.get("legend")[0].get("selected"))self.options.get("series").extend(chart.options.get("series"))return self

Chart3D類

Chart3D類是3D圖表的基類,父類為Chart類。
Chart3D類的簽名為class Chart3D(init_opts)。Chart3D類的參數和方法主要繼承自Chart類。
最主要的變化就是增加了echarts-gl依賴庫用于繪制3D圖表。

Chart3D類源碼

class Chart3D(Chart):def __init__(self, init_opts: types.Init = opts.InitOpts()):init_opts.renderer = RenderType.CANVASsuper().__init__(init_opts)self.js_dependencies.add("echarts-gl")self.options.update(visualMap=opts.VisualMapOpts().opts)self._3d_chart_type: Optional[str] = None # 3d chart type,don't use it directly

ThreeAxisChart類

ThreeAxisChart類:三維坐標系圖表基類,父類為Chart3D類。
ThreeAxisChart類的參數和方法主要繼承自Chart3D類。
最主要的變化就是增加了add方法,add方法的簽名為:

def add(# 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。series_name: str,# 系列數據data: Sequence,# 三維柱狀圖中三維圖形的著色效果。# color:只顯示顏色,不受光照等其它因素的影響。# lambert:通過經典的 lambert 著色表現光照帶來的明暗。# realistic:真實感渲染,配合 light.ambientCubemap 和 postEffect 使用可以讓展示的畫面效果和質感有質的提升。# ECharts GL 中使用了基于物理的渲染(PBR) 來表現真實感材質。shading: Optional[str] = None,# 圖元配置項,參考 `series_options.ItemStyleOpts`itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None# 標簽配置項,參考 `series_options.LabelOpts`label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(is_show=False),# 3D X 坐標軸配置項,參考 `Axis3DOpts`xaxis3d_opts: Union[opts.Axis3DOpts, dict] = opts.Axis3DOpts(type_="category"),# 3D Y 坐標軸配置項,參考 `Axis3DOpts`yaxis3d_opts: Union[opts.Axis3DOpts, dict] = opts.Axis3DOpts(type_="category"),# 3D Z 坐標軸配置項,參考 `Axis3DOpts`zaxis3d_opts: Union[opts.Axis3DOpts, dict] = opts.Axis3DOpts(type_="value"),# 三維笛卡爾坐標系配置項,參考 `Grid3DOpts`grid3d_opts: Union[opts.Grid3DOpts, dict] = opts.Grid3DOpts(), )

ThreeAxisChart類源碼

class ThreeAxisChart(Chart3D):def add(self,series_name: str,data: Sequence,shading: Optional[str] = None,itemstyle_opts: types.ItemStyle = None,label_opts: types.Label = opts.LabelOpts(is_show=False),xaxis3d_opts: types.Axis3D = opts.Axis3DOpts(type_="category"),yaxis3d_opts: types.Axis3D = opts.Axis3DOpts(type_="category"),zaxis3d_opts: types.Axis3D = opts.Axis3DOpts(type_="value"),grid3d_opts: types.Grid3D = opts.Grid3DOpts(),encode: types.Union[types.JSFunc, dict, None] = None,):self.options.get("legend")[0].get("data").append(series_name)self.options.update(xAxis3D=xaxis3d_opts,yAxis3D=yaxis3d_opts,zAxis3D=zaxis3d_opts,grid3D=grid3d_opts,)self.options.get("series").append({"type": self._3d_chart_type,"name": series_name,"data": data,"label": label_opts,"shading": shading,"itemStyle": itemstyle_opts,"encode": encode,})return self

總結

以上是生活随笔為你收集整理的pyecharts源码解读(12)图表类包charts之chart模块:常用图表基类Chart、直角坐标系图表基类RectChart、3D图表基类Chart3D的全部內容,希望文章能夠幫你解決所遇到的問題。

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