Choosing hue based on column

Question:

Having a DF of predicted (column) an actual (column) values. I would like to plot an overlaid histogram that have the same look as when using the hue property. I couldn’t find a way of doing so without reconstructing my original data.

Here is an example of what I’m trying to do:

df = pd.DataFrame({'A':np.random.uniform(low=0.0, high=9.0, size=(150,)),'P':np.random.uniform(low=0.0, high=9.0, size=(150,))})
actual = df.A.to_frame()
predicted = df.P.to_frame()

print(df.head())

actual.columns = ['value']
actual['t'] = 'A'

predicted.columns = ['value']
predicted['t'] = 'P'
tmp = pd.concat([actual,predicted])

print(tmp.head())

sns.histplot(data=tmp,x='value' ,hue="t")

Output:
Original DF
          A         P
0  2.546046  2.503833
1  4.797077  2.306720
2  1.358222  4.839675
3  7.063206  8.828486
4  3.010978  7.406337

Manipulated DF
      value  t
0  2.546046  A
1  4.797077  A
2  1.358222  A
3  7.063206  A
4  3.010978  A
<matplotlib.axes._subplots.AxesSubplot at 0x7fd657112fd0>

enter image description here

Q: How can I get similar results without manipulating my original DF?

Asked By: Shlomi Schwartz

||

Answers:

Unless I am misunderstanding what you’re asking.

From the docs:

If neither x nor y is assigned, the dataset is treated as wide-form, and a histogram is drawn for each numeric column

df = pd.DataFrame(
    {
        "A": np.random.uniform(low=0.0, high=9.0, size=(150,)),
        "P": np.random.uniform(low=0.0, high=9.0, size=(150,)),
    }
)
ax = sns.histplot(df)

enter image description here

Answered By: Alex
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.