我是数据可视化领域的新手。我正在练习 Seaborn,我正在尝试使用此数据框绘制条形图。我希望图表在每个符号上有 3 个条形,但是,每个符号上的输出只有 1 个条形。我可以知道如何修复它吗?
数据帧的一部分...
returns_7d returns_30d returns_ytd
symbol
TDOC -0.210839 -17.712095 -3.922423
EXAS -4.649067 -6.439275 -1.415680
PACB -2.953760 11.886232 37.815711
REGN 0.465364 5.803325 -0.629814
TWST 6.707956 3.619967 10.4043
代码如下:
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
# Change the style of the figure to the "dark" theme
sns.set_style("darkgrid")
plt.figure(figsize=(12,6))
plt.title('YTD Returns')
sns.barplot(x=returns_all.index,y=returns_all['returns_7d'],color='b',edgecolor='w',label='returns_7d')
sns.barplot(x=returns_all.index,y=returns_all['returns_30d'],color='r',edgecolor='w',label='returns_30d')
sns.barplot(x=returns_all.index,y=returns_all['returns_ytd'],color='g',edgecolor='w',label='returns_ytd')
plt.xlabel('symbol', fontsize=11)
plt.ylabel('%', fontsize=11)
plt.xticks(rotation = 90)
plt.legend()
plt.show()
输出如下:
答案 0 :(得分:1)
答案 1 :(得分:1)
要使用 seaborn 创建这样的图,请注意 seaborn 更喜欢 "long form" 中的数据。 reset_index
将索引转换为常规列,melt
将列转换为 function BranchList() {
const [isLoaded, setIsLoaded] = useState(false)
const dispatch = useDispatch()
useEffect(() => {
if(!isLoaded) {
dispatch(fetchBranches())
.then(() => setIsLoaded(true))
}
}, [isLoaded])
const branches = useSelector(state => state.branches.branches)
const headerNames = ["Id", "Name"]
if (!isLoaded) {
return <>Loading...</>
}
return (
<EditableTable
data={branches}
headerNames={headerNames}
onEditConfirm={(row) => dispatch(updateBranch(row))}
onDelete={(id) => dispatch(deleteBranch(id))} />
)
}
对。
<variable, value>
长数据框看起来像:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from io import StringIO
data_str = ''' returns_7d returns_30d returns_ytd
TDOC -0.210839 -17.712095 -3.922423
EXAS -4.649067 -6.439275 -1.415680
PACB -2.953760 11.886232 37.815711
REGN 0.465364 5.803325 -0.629814
TWST 6.707956 3.619967 10.4043'''
df = pd.read_csv(StringIO(data_str), delim_whitespace=True)
df.index.name = 'symbol'
df_long = df.reset_index().melt(id_vars='symbol')
sns.barplot(data=df_long, x='symbol', y='value', hue='variable', palette='rocket')
plt.show()