I asked ChatGPT to generate a sample list of Tang Dynasty Poets from the book of 300 poems.
It gave me this – it had some duplicates and one Song Dynasty poet in it.
import pandas as pd data = [ {"English Name": "Li Bai", "Chinese Name": "李白", "Dates": "701-762"}, {"English Name": "Du Fu", "Chinese Name": "杜甫", "Dates": "712-770"}, {"English Name": "Wang Wei", "Chinese Name": "王维", "Dates": "699-759"}, {"English Name": "Li Shangyin", "Chinese Name": "李商隐", "Dates": "813-858"}, {"English Name": "Bai Juyi", "Chinese Name": "白居易", "Dates": "772-846"}, {"English Name": "Han Yu", "Chinese Name": "韩愈", "Dates": "768-824"}, {"English Name": "Meng Haoran", "Chinese Name": "孟浩然", "Dates": "689-740"}, {"English Name": "Li He", "Chinese Name": "李贺", "Dates": "790-816"}, {"English Name": "Li Yu", "Chinese Name": "李煜", "Dates": "937-978"}, {"English Name": "Li Qingzhao", "Chinese Name": "李清照", "Dates": "1084-1151"}, {"English Name": "Liu Zongyuan", "Chinese Name": "柳宗元", "Dates": "773-819"}, {"English Name": "Wei Yingwu", "Chinese Name": "韦应物", "Dates": "737-792"}, {"English Name": "Wang Changling", "Chinese Name": "王昌龄", "Dates": "698-757"}, {"English Name": "Cui Hao", "Chinese Name": "崔颢", "Dates": "704-754"}, {"English Name": "Du Mu", "Chinese Name": "杜牧", "Dates": "803-852"}, {"English Name": "Meng Jiao", "Chinese Name": "孟郊", "Dates": "751-814"}, {"English Name": "Yuan Zhen", "Chinese Name": "元稹", "Dates": "779-831"}, {"English Name": "Zhang Jiuling", "Chinese Name": "张九龄", "Dates": "678-740"}, {"English Name": "Meng Haoran", "Chinese Name": "孟浩然", "Dates": "689-740"}, {"English Name": "Wei Yingwu", "Chinese Name": "韦应物", "Dates": "737-792"} ] df = pd.DataFrame(data) print(df)
I cleaned it up and ask it to give me plot of the ages – so I can see how lives overlapped
import pandas as pd import matplotlib.pyplot as plt data = [ {"English Name": "Li Bai", "Chinese Name": "李白", "Dates": "701-762"}, {"English Name": "Du Fu", "Chinese Name": "杜甫", "Dates": "712-770"}, {"English Name": "Wang Wei", "Chinese Name": "王维", "Dates": "699-759"}, {"English Name": "Li Shangyin", "Chinese Name": "李商隐", "Dates": "813-858"}, {"English Name": "Bai Juyi", "Chinese Name": "白居易", "Dates": "772-846"}, {"English Name": "Han Yu", "Chinese Name": "韩愈", "Dates": "768-824"}, {"English Name": "Meng Haoran", "Chinese Name": "孟浩然", "Dates": "689-740"}, {"English Name": "Li He", "Chinese Name": "李贺", "Dates": "790-816"}, {"English Name": "Li Yu", "Chinese Name": "李煜", "Dates": "937-978"}, {"English Name": "Liu Zongyuan", "Chinese Name": "柳宗元", "Dates": "773-819"}, {"English Name": "Wei Yingwu", "Chinese Name": "韦应物", "Dates": "737-792"}, {"English Name": "Wang Changling", "Chinese Name": "王昌龄", "Dates": "698-757"}, {"English Name": "Cui Hao", "Chinese Name": "崔颢", "Dates": "704-754"}, {"English Name": "Du Mu", "Chinese Name": "杜牧", "Dates": "803-852"}, {"English Name": "Meng Jiao", "Chinese Name": "孟郊", "Dates": "751-814"}, {"English Name": "Yuan Zhen", "Chinese Name": "元稹", "Dates": "779-831"}, {"English Name": "Zhang Jiuling", "Chinese Name": "张九龄", "Dates": "678-740"} ] df = pd.DataFrame(data) df[['Start', 'End']] = df['Dates'].str.split('-', expand=True).astype(int) # Sorting by start date df = df.sort_values(by='Start') # Creating the chart fig, ax = plt.subplots() for i, row in df.iterrows(): ax.plot([row['Start'], row['End']], [i, i], linewidth=3, color='blue') ax.scatter(row['Start'], i, color='red', marker='o', s=50) ax.scatter(row['End'], i, color='green', marker='o', s=50) ax.text(row['Start'], i-0.2, row['English Name'], ha='right') ax.text(row['End'], i-0.2, row['Chinese Name'], ha='left') # Setting chart labels and title ax.set_yticks(range(len(df))) ax.set_yticklabels([]) ax.set_xlabel('Year') ax.set_title('Tang Dynasty Poets - Lifespan Overlap') plt.show()
It gave me an error on the Chinese charters. So, I searched and found that I can load a font
And specify the fontproperties for the label you have issue with.
import pandas as pd import matplotlib.pyplot as plt import matplotlib.font_manager as fm data = [ {"English Name": "Li Bai", "Chinese Name": "李白", "Dates": "701-762"}, {"English Name": "Du Fu", "Chinese Name": "杜甫", "Dates": "712-770"}, {"English Name": "Wang Wei", "Chinese Name": "王维", "Dates": "699-759"}, {"English Name": "Li Shangyin", "Chinese Name": "李商隐", "Dates": "813-858"}, {"English Name": "Bai Juyi", "Chinese Name": "白居易", "Dates": "772-846"}, {"English Name": "Han Yu", "Chinese Name": "韩愈", "Dates": "768-824"}, {"English Name": "Meng Haoran", "Chinese Name": "孟浩然", "Dates": "689-740"}, {"English Name": "Li He", "Chinese Name": "李贺", "Dates": "790-816"}, {"English Name": "Li Yu", "Chinese Name": "李煜", "Dates": "937-978"}, {"English Name": "Liu Zongyuan", "Chinese Name": "柳宗元", "Dates": "773-819"}, {"English Name": "Wei Yingwu", "Chinese Name": "韦应物", "Dates": "737-792"}, {"English Name": "Wang Changling", "Chinese Name": "王昌龄", "Dates": "698-757"}, {"English Name": "Cui Hao", "Chinese Name": "崔颢", "Dates": "704-754"}, {"English Name": "Du Mu", "Chinese Name": "杜牧", "Dates": "803-852"}, {"English Name": "Meng Jiao", "Chinese Name": "孟郊", "Dates": "751-814"}, {"English Name": "Yuan Zhen", "Chinese Name": "元稹", "Dates": "779-831"}, {"English Name": "Zhang Jiuling", "Chinese Name": "张九龄", "Dates": "678-740"} ] df = pd.DataFrame(data) font = fm.FontProperties(fname=r"C:\windows\fonts\simsun.ttc") df[['Start', 'End']] = df['Dates'].str.split('-', expand=True).astype(int) # Sorting by start date df = df.sort_values(by='Start') # Creating the chart fig, ax = plt.subplots(figsize=(12, 8)) for i, row in df.iterrows(): ax.plot([row['Start'], row['End']], [i, i], linewidth=3, color='blue') ax.scatter(row['Start'], i, color='red', marker='o', s=50) ax.scatter(row['End'], i, color='green', marker='o', s=50) ax.text(row['Start'], i-0.2, row['English Name'], ha='right') ax.text(row['End'], i-0.2, row['Chinese Name'], ha='left', fontproperties=font) # Setting chart labels and title ax.set_yticks(range(len(df))) ax.set_yticklabels([]) ax.set_xlabel('Year') ax.set_title('Tang Dynasty Poets - Lifespan Overlap') plt.show()