Skip to content Skip to sidebar Skip to footer

Plotting Of 2d Data : Heatmap With Different Colormaps

I want to visualize 2D data that I have. For example following is the data with four attributes: att1 att2 att3 fun1 10 0 2 fun2 0 1 3 fun3

Solution 1:

With Python :

I found a better way :

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm

# data loading
df = pd.read_csv("file.csv", index_col=0) 


# plotting
fig,ax = plt.subplots()
ax.matshow(df.mask(((df == df) | df.isnull()) & (df.columns != "att1")), 
           cmap=cm.Reds) # You can change the colormap here
ax.matshow(df.mask(((df == df) | df.isnull()) & (df.columns != "att2")), 
           cmap=cm.Greens)
ax.matshow(df.mask(((df == df) | df.isnull()) & (df.columns != "att3")), 
           cmap=cm.Blues)
plt.xticks(range(3), df.columns)
plt.yticks(range(4), df.index)
plt.show()

hm

some details :

df.mask(((df == df)| df.isnull())&(df.columns !="att1"))
      att1  att2  att3
fun1    10NaNNaN
fun2     0NaNNaN
fun3     1NaNNaN
fun4     2NaNNaN

Older version, with numpy masked array :

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from numpy.ma import masked_array
import numpy as np

df = pd.read_clipboard() # just copied your example# define masked arrays to mask all but the given column
c1 = masked_array(df, mask=(np.ones_like(df)*(df.values[0]!=df.values[0][0]))) 
c2 = masked_array(df, mask=(np.ones_like(df)*(df.values[0]!=df.values[0][1])))
c3 = masked_array(df, mask=(np.ones_like(df)*(df.values[0]!=df.values[0][2])))

fig,ax = plt.subplots()
ax.matshow(c1,cmap=cm.Reds) # You can change the colormap here
ax.matshow(c2,cmap=cm.Greens)
ax.matshow(c3,cmap=cm.Blues)
plt.xticks(range(3), df.columns)
plt.yticks(range(4), df.index)

Some details :

df is a dataframe :

      att1  att2  att3
fun1    10     0     2
fun2     0     1     3
fun3     1    10     5
fun4     2     3    10

c1, c2, c3 are masked arrays (for columns 1, 2 and 3):

>>> c1
masked_array(data =
 [[10-- --]
 [0-- --]
 [1-- --]
 [2-- --]],
             mask =
 [[FalseTrueTrue]
 [FalseTrueTrue]
 [FalseTrueTrue]
 [FalseTrueTrue]],
       fill_value =999999)

alternatively, you can start from a numpy 2D array :

>> data
array([[10,  0,  2],
       [ 0,  1,  3],
       [ 1, 10,  5],
       [ 2,  3, 10]])

and replace all df and df.values with data (the 2D array), except in the labeling part.

Solution 2:

Try:

ddf = structure(list(fn = structure(1:4, .Label = c("fun1", "fun2", 
"fun3", "fun4"), class = "factor"), att1 = c(10L, 0L, 1L, 2L), 
    att2 = c(0L, 1L, 10L, 3L), att3 = c(2L, 3L, 5L, 10L)), .Names = c("fn", 
"att1", "att2", "att3"), class = "data.frame", row.names = c(NA, 
-4L))

ddffnatt1att2att3
1 fun1   10    0    2
2 fun2    0    1    3
3 fun3    1   10    5
4 fun4    2    3   10

ddfm = melt(ddf)
ddfmfnvariablevalue
1  fun1att1    10
2  fun2att1     0
3  fun3att1     1
4  fun4att1     2
5  fun1att2     0
6  fun2att2     1
7  fun3att2    10
8  fun4att2     3
9  fun1att3     2
10 fun2att3     3
11 fun3att3     5
12 fun4att3    10
> 
ggplot(ddfm)+ geom_tile(aes(x=variable, y=fn, fill=value))

enter image description here

Post a Comment for "Plotting Of 2d Data : Heatmap With Different Colormaps"