跳转至


课程  因子投资  机器学习  Python  Poetry  ppw  tools  programming  Numpy  Pandas  pandas  算法  hdbscan  聚类  选股  Algo  minimum  numpy  algo  FFT  模式识别  配对交易  GBDT  LightGBM  XGBoost  statistics  CDF  KS-Test  monte-carlo  VaR  回测  过拟合  algorithms  machine learning  strategy  python  sklearn  pdf  概率  数学  面试题  量化交易  策略分类  风险管理  Info  interview  career  xgboost  PCA  wavelet  时序事件归因  SHAP  Figures  Behavioral Economics  graduate  arma  garch  人物  职场  Quantopian  figure  Banz  story  量化传奇  rsi  zigzag  穹顶压力  因子  pe  ORB  策略  Xgboost  Alligator  Indicator  factor  alpha101  alpha  技术指标  wave  quant  algorithm  pearson  spearman  tushare  因子分析  Alphalens  涨停板  herd-behaviour  因子策略  momentum  因子评估  review  SMC  聪明钱  trade  history  indicators  zscore  波动率  强化学习  顶背离  freshman  resources  others  AI  DeepSeek  network  量子计算  金融交易  IBM  weekly  LLT  backtest  backtrader  研报  papers  UBL  quantlib  jupyter-notebook  scikit-learn  pypinyin  qmt  xtquant  blog  static-site  duckdb  工具  colors  free resources  barra  world quant  Alpha  openbb  数据  risk-management  llm  prompt  CANSLIM  Augment  arsenal  copilot  vscode  code  量化数据存储  hdf5  h5py  cursor  augment  trae  Jupyter  jupysql  pyarrow  parquet  数据源  quantstats  实盘  clickhouse  notebook  redis  remote-agent  AI-tools  Moonshot  回测,研报,tushare 


“Pandas 的 DataFrame 提供了强大的样式功能,可以通过 Styler 对象实现类似 Excel 的条件着色效果。此外,Pandas 内置的绘图方法支持多种图表类型,轻松满足数据可视化需求。”


1. 表格和样式

Pandas 的 DataFrame 提供了强大的样式功能,可以通过 Styler 对象实现类似 Excel 的条件着色效果。以下是关键方法和示例:

1.1. ​基础样式设置

通过 DataFrame.style 访问样式功能,支持链式调用:

1
df.style.set_caption("标题").set_properties(**{'background-color': 'lightgray'})

50%

1.2. ​条件着色

1.2.1. 单列条件着色


1
2
3
4
def color_negative_red(val):
    color = 'red' if val < 0.2 else 'black'
    return f'color: {color}'
df.style.applymap(color_negative_red)

50%

1.2.2. 多列条件着色

1
2
df.style.apply(lambda x: ['background: yellow' if v > 0.2 else '' for v in x], 
                        subset=['A', 'C'])

50%

1.2.3. ​极值高亮


1
df.style.highlight_max(color='lightgreen').highlight_min(color='pink')

50%

1.2.4. 渐变色背景

1
df.style.background_gradient(cmap='Blues', subset=['B'])

50%

1.2.5. 条形图样式

1
df.style.bar(subset=['C'], color='#5fba7d')

50%


1.2.6. 自定义表格样式

1
2
3
headers = {'selector': 'th',
    'props': 'background-color: #5e17eb; color: white;'}
df.style.set_table_styles([headers])

50%

1.2.7. 动态条件着色(复杂逻辑)​

1
2
3
4
5
def highlight_risk(row):
    # 当A列>90且B列<50时标黄
    return ['background: yellow' if (row['A']>0.3) & 
    (row['B']<0.5) else '' for _ in row]  # 返回与行等长的样式列表
df.style.apply(highlight_risk, axis=1)  # axis=1表示按行处理

50%

Notes

  • 样式仅在 Jupyter Notebook 或导出为 HTML 时生效,不支持直接修改原始数据。
  • 使用 subset 参数可限定着色范围。
  • 渐变色 (background_gradient) 支持调整色域范围 (low=0.2, high=0.8)。

2. Pandas 内置绘图功能

在 pandas 中,我们可能有多列数据,还有行标签和列标签。pandas 自身就有内置的方法,用于简化从 DataFrame 和 Series 绘制图形。

2.1. 线形图

Series 和 DataFrame 都有一个 plot 属性,用于绘制基本图表。默认情况下,plot() 生成的是线形图。

1
2
s = pd.Series(np.random.standard_normal(10).cumsum(), index=np.arange(0, 100, 10))
s.plot()

50%


该 Series 对象的索引会被传给matplotlib,并用于绘制 x 轴。可以通过 use_index=False 来禁用索引。x 轴的刻度和界限可以通过 xtick 和 xlim 选项进行调节,y 轴用 yticks 和 ylim 调节。plot 参数的部分列表参见下表:

参数 说明
alpha 图形填充透明度(0~1 之间)
ax matplotlib 的 Axes 对象,默认为当前 Axes (gca())
colormap 指定颜色映射(如 'viridis')
figsize 图像尺寸,格式为 (宽度, 高度)(单位:英寸)
fontsize 刻度标签字体大小
grid 是否显示网格线(默认为 None,遵循 matplotlib 默认样式)
kind 图形类型,可选:'line'(折线图,默认)、'bar'(柱状图)、'barh'(横向柱状图)、'hist'(直方图)、'box'(箱线图)、'kde'/'density'(核密度估计)、'area'(面积图)、'pie'(饼图)
label 图例标签名称
legend 是否显示图例(默认为 False)
logx/logy 是否对 x/y 轴使用对数刻度(默认为 False)
loglog 是否对 x/y 轴同时使用对数刻度
position 柱状图的柱子位置(需避免与 kind='bar' 冲突)
rot 刻度标签旋转角度(如 45 表示 45 度)
secondary_y 是否使用右侧的第二个 y 轴(默认为 False)
style 线条样式(如 'k--' 表示黑色虚线)
table 是否在图表下方显示数据表格(默认为 False)
title 图表标题(字符串)
use_index 是否使用 Series 的索引作为 x 轴刻度标签(默认为 True)
xerr/yerr 为柱状图添加误差线
xlim/ylim 设置 x/y 轴显示范围(格式:(min, max))
xticks/yticks 自定义 x/y 轴刻度值(列表)
**kwds 其他 matplotlib 绘图参数(如 color='red')

pandas 的大部分绘图方法都接收一个可选的 ax 参数,它可以是 matplotlib 的子图对象,这使你能够在网格布局中更为灵活地处理子图的位置。

DataFrame 的 plot 方法将各个列绘制成同一子图中的线,并自动创建图例。

1
2
3
4
5
df = pd.DataFrame(np.random.standard_normal((10, 4)).cumsum(0),
                  columns=['A', 'B', 'C', 'D'],
                  index=np.arange(0, 100, 10))
plt.style.use('grayscale')
df.plot()

50%

Notes

这里使用了 plt.style.use('grayscale') 将配色模式设置为灰度模式。

对于不同的绘图类型,plot 属性包含很多方法。例如,df.plot() 等价于 df.plot.line()。


Notes

plot 的额外关键字参数会传递给相应的 matplotlib 绘图函数,所以要更进一步自定义图表,就必须学习更多有关matplotlib API的知识。

DataFrame 还有一些用于对列进行灵活处理的选项。例如:要将所有列都绘制到同一个子图中还是分别创建各自的子图。下表展示了专属于DataFrame的plot参数:

参数 说明
subplots 是否为每一列数据创建子图,默认为 False
sharex 如果 subplots=True,是否共享 x 轴,默认为 True(当 ax=None 时)
sharey 如果 subplots=True,是否共享 y 轴,默认为 False
layout 子图的行列布局,格式为 (rows, columns)
legend 添加子图图例(默认为True)
sort_columns 是否按列名排序,默认为 False

2.2. 柱状图

plot.bar() 和 plot.barh() 分别用于绘制水平柱状图和垂直柱状图。对于柱状图,Series 或 DataFrame 的索引将被用作x轴(bar)或y轴(barh)的刻度。

1
2
3
4
fig, axes = plt.subplots(2,1)
data = pd.Series(np.random.uniform(size=16), index=list('abcdefghijklmnop'))
data.plot.bar(ax=axes[0], color='k', alpha=0.7)
data.plot.barh(ax=axes[1], color='k', alpha=0.7)

50%

对于 DataFrame,柱状图会将每一行的值分为一组,并排显示。

1
2
3
4
df = pd.DataFrame(np.random.uniform(size=(6, 4)),
        index=["one", "two", "three", "four", "five", "six"],
        columns=pd.Index(["A", "B", "C", "D"], name="Genus"))
df.plot.bar()

50%

注意,DataFrame 各列的名称“Genus”被用作图例标题。


传入stacked=True即可为DataFrame生成堆积柱状图,这样每行的值就会水平堆积在一起。

1
df.plot.bar(stacked=True,alpha=0.5)

50%