【发布时间】:2020-04-21 16:47:37
【问题描述】:
我正在尝试为下面的热图使用对数刻度。我需要一个 0-30 之间数字的热图,然后是另一个可能是错误的较大值的配色方案。
尝试了几种不同的方法,但仍然非常困惑。感谢您的帮助。
干杯!
这是我正在使用的当前脚本。
read_occupancy = pd.read_csv (r'C:\Users\holborm\Desktop\Visualisation\dataaxisplotstuff.csv') #read the csv file (put 'r' before the path string to address any special characters, such as '\'). Don't forget to put the file name at the end of the path + ".csv"
df = DataFrame(read_occupancy) # assign column names
#create time and detector name axis
sns.heatmap(df.set_index('Row Labels').T, cmap='magma', linecolor='white', linewidths=.05)
sns.clustermap(df.set_index('Row Labels').T, cmap='magma', linecolor='white', linewidths=.05)
根据问题/答案更新
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib.colors import LogNorm
def mix_palette():
palette = sns.color_palette("GnBu", 10)
palette[9] = sns.color_palette("OrRd", 10)[9]
return palette
def set_ax(iax):
for text in iax.texts:
if float(text.get_text()) < 30:
text.set_text("")
iax.figure.tight_layout()
def load_data(path):
initial = pd.read_csv(path, delim_whitespace=True)
columns = list(initial.columns.values)[1:]
rows = []
for values in initial.values:
rng = values[0]
for column, value in zip(columns, values[1:]):
rows.append([rng, column, value])
return pd.DataFrame(data=rows, columns=['range', 'label', 'quantity'])
data = load_data('dataaxisplotstuff.csv')
data = data.pivot("range", "label", "quantity")
mi, ma = data.values.min(), data.values.max()
ax = sns.heatmap(data, cmap=mix_palette(), annot=True, square=True, cbar_kws={'ticks': ticker.LogLocator(numticks=8)},
xticklabels=True, yticklabels=True, norm=LogNorm(vmin=mi, vmax=ma))
set_ax(ax)
plt.show()
收到此错误
TypeError Traceback (most recent call last)
<ipython-input-5-7466da1cd6c9> in <module>()
1 data = load_data('dataaxisplotstuff.csv')
2 data = data.pivot("range", "label", "quantity")
----> 3 mi, ma = data.values.min(), data.values.max()
4 ax = sns.heatmap(data, cmap=mix_palette(), annot=True, square=True, cbar_kws={'ticks': ticker.LogLocator(numticks=8)},
5 xticklabels=True, yticklabels=True, norm=LogNorm(vmin=mi, vmax=ma))
~\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\core\_methods.py in _amin(a, axis, out, keepdims)
27
28 def _amin(a, axis=None, out=None, keepdims=False):
---> 29 return umr_minimum(a, axis, None, out, keepdims)
30
31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
TypeError: '<=' not supported between instances of 'float' and 'str'
【问题讨论】:
-
您能否提供指向“dataaxisplotstuff.csv”或其他格式相同的文件的链接,我加入了第一列 00 - 01hr => 00-01hr 和行标签 => RowLabels 的字符串。我猜你的错误可能与此有关。