X 轴上的 Seaborn 热图间距
Seaborn heatmap spacing on x axis
我目前正在使用 seaborn.heatmap() 来显示我在 pandas.DataFrame 中组织的二进制数据。 DataFrame的索引是离散的,对应不同的位置,而列是连续的,代表时间。如何使热图中的 x 轴在测量值之间具有正确的间距?
更准确地说,我希望 0 和 1'000 之间的差异比 0 和 1 之间的差异大 1'000 倍,并且 1 和 1.1 之间的差异大 10'000 倍。以下是我的数据组织方式的最低限度:
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame(np.random.randint(0,2,size=(5, 8)), columns=[1,1.1,2,3,4,1001,1002,1003], index=['A','B','C','D','E'])
sns.heatmap(df,cmap='binary', square=True)
生成的图像如下所示:https://i.stack.imgur.com/uxSrH.png
测量之间的数据(例如,对于测量值 500,它不是 DataFrame 的一部分,应该为 0。我不介意放弃 square=True。
对于那些想知道的人,0/1 是 False/True 陈述,表明我是否在给定时间在此位置的此采样点进行了测量。
非常感谢
您可以使用 plt.pcolor()
,它会创建一个间距不均匀的网格,网格线由其第一个和第二个参数提供。由于 5x8 的单元格网格需要 6x9 的网格线,因此 x 值列表和 y 值列表都需要扩展一个。
该示例使用 101
而不是 1001
,因为 1000 倍的差异会使所有内容拉到一条细线,除了 4 和 1001 之间的区域。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# slightly modified example data
df = pd.DataFrame(np.random.randint(0, 2, size=(5, 8)), columns=[1, 1.1, 2, 3, 4, 101, 102, 103],
index=['A', 'B', 'C', 'D', 'E'])
plt.pcolor(list(df.columns) + [2 * df.columns[-1] - df.columns[-2]],
np.arange(len(df.index)+1),
df.values, cmap='binary')
plt.yticks(np.arange(0.5, len(df.index)), df.index) # labels between the grid lines
plt.show()
我目前正在使用 seaborn.heatmap() 来显示我在 pandas.DataFrame 中组织的二进制数据。 DataFrame的索引是离散的,对应不同的位置,而列是连续的,代表时间。如何使热图中的 x 轴在测量值之间具有正确的间距?
更准确地说,我希望 0 和 1'000 之间的差异比 0 和 1 之间的差异大 1'000 倍,并且 1 和 1.1 之间的差异大 10'000 倍。以下是我的数据组织方式的最低限度:
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df=pd.DataFrame(np.random.randint(0,2,size=(5, 8)), columns=[1,1.1,2,3,4,1001,1002,1003], index=['A','B','C','D','E'])
sns.heatmap(df,cmap='binary', square=True)
生成的图像如下所示:https://i.stack.imgur.com/uxSrH.png
测量之间的数据(例如,对于测量值 500,它不是 DataFrame 的一部分,应该为 0。我不介意放弃 square=True。
对于那些想知道的人,0/1 是 False/True 陈述,表明我是否在给定时间在此位置的此采样点进行了测量。
非常感谢
您可以使用 plt.pcolor()
,它会创建一个间距不均匀的网格,网格线由其第一个和第二个参数提供。由于 5x8 的单元格网格需要 6x9 的网格线,因此 x 值列表和 y 值列表都需要扩展一个。
该示例使用 101
而不是 1001
,因为 1000 倍的差异会使所有内容拉到一条细线,除了 4 和 1001 之间的区域。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# slightly modified example data
df = pd.DataFrame(np.random.randint(0, 2, size=(5, 8)), columns=[1, 1.1, 2, 3, 4, 101, 102, 103],
index=['A', 'B', 'C', 'D', 'E'])
plt.pcolor(list(df.columns) + [2 * df.columns[-1] - df.columns[-2]],
np.arange(len(df.index)+1),
df.values, cmap='binary')
plt.yticks(np.arange(0.5, len(df.index)), df.index) # labels between the grid lines
plt.show()