【发布时间】:2021-03-28 04:38:23
【问题描述】:
工作代码
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import numpy as np
from matplotlib import colors,cm
from matplotlib import pyplot as plt
filename = r'c:\Users\91956\Desktop\time_50.csv'
df = pd.read_csv(filename,index_col=0)
select_col = df.columns[1:]
cmap = mpl.colors.LinearSegmentedColormap.from_list("", ["red","white", "green"])
def background_gradient(s, cmap='PuBu', low=0, high=0):
s = pd.to_numeric(s, errors='coerce') #<-- here, string will become nan.
m = s.min() #<---------- here
M = s.max() #<-----------here
rng = M - m
norm = colors.TwoSlopeNorm(vmin=m - (rng * low), vcenter=0., vmax=M + (rng * high))
normed = norm(s.values)
c = [colors.rgb2hex(x) for x in plt.cm.get_cmap(cmap)(normed)]
return ['background-color: %s' % color for color in c]
S = df.style.apply( background_gradient,
cmap=cmap,
low=0.5,
high=0.5,
subset= pd.IndexSlice[:, select_col],
axis=1
)
html = S.render()
with open("output.html","w") as fp:
fp.write(html)
我遇到了这个错误
文件“c:\Users\91956\Desktop\asdf.py”,第 29 行,在 m=df.min().min(), 文件“C:\Users\91956\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py”,第 11468 行,在 stat_func 返回 self._reduce( 文件“C:\Users\91956\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\series.py”,第 4248 行,在 _reduce 返回操作(代表,skipna=skipna,**kwds) 文件“C:\Users\91956\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\nanops.py”,第 129 行,在 f 结果= alt(值,轴=轴,skipna=skipna,**kwds) 文件“C:\Users\91956\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\nanops.py”,第 873 行,减少 结果 = getattr(值,方法)(轴) 文件“C:\Users\91956\AppData\Local\Programs\Python\Python39\lib\site-packages\numpy\core_methods.py”,第 43 行,在 _amin return umr_minimum(a, axis, None, out, keepdims, initial, where) TypeError:“numpy.ndarray”和“str”的实例之间不支持“>=”
更新 2 做了必要的改变。能够获得所需的输出。
【问题讨论】:
-
问题在于您的值范围的中位数不为零。调用
background_gradientinfo时尝试设置low, high -
什么应该是高和低以使零成为中位数,例如低 = -5 和高 = 5 之类的值?
-
它不起作用。
-
我已经更新了我的答案@AniketPatil:检查一下
-
它正在工作。
标签: python pandas matplotlib seaborn