1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
%pip install plotly pandas
import pandas as pd
import plotly.graph_objs as go
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
df = pd.read_csv('~/git/cleberg.net/static/salary.csv')
# Function to format salary as US currency
def format_currency(value):
return f"${value:,.2f}"
# Reverse the order of the DataFrame
df = df.iloc[::-1].reset_index(drop=True)
# Calculate the percentage increase
df['Percentage Increase'] = df['Salary'].pct_change() * 100
# Initialize the plot
fig = go.Figure()
# Adding each data point as a separate trace to display the text
for index, row in df.iterrows():
title_company = f"{row['Title']} ({row['Company']})"
salary_formatted = format_currency(row['Salary'])
if pd.notna(row['Percentage Increase']):
text = f"{salary_formatted} ({row['Percentage Increase']:.2f}%)"
else:
text = salary_formatted
fig.add_trace(go.Scatter(
x=[row['Start'], row['End']],
y=[row['Salary'], row['Salary']],
text=[text],
mode='lines+text',
name=title_company, # Combine title and company for legend
textposition='top center'
))
fig.update_layout(
title="Salary Data Over Time (annualized)",
xaxis_title="Time",
yaxis_title="Salary",
font=dict(
family="monospace",
size=16
),
margin=dict(l=50, r=50, t=50, b=100), # Adjust bottom margin for legend space
legend=dict(
orientation="h", # Horizontal orientation
yanchor="top", # Anchor to the top of the legend box
y=-0.3, # Position below the graph
xanchor="center", # Center the legend horizontally
x=0.5 # Center the legend
),
height=800 # Increase vertical size
)
fig.show()
|