A good way to visualize panel data with Stata is to rely on the package panelview created and maintained by Yiqing Xu:

Other possibilities include Ben Jann’s heatplot:

Today, I will use data from the following paper to show how to use panelview:

Hugo Oriola, Jamel Saadaoui (31 May 2024), How do geopolitical interests affect financial markets reaction to international institution projects? SSRN Working Paper: https://dx.doi.org/10.2139/ssrn.4849861.

I will replicate Figure 4 in the paper:

// Select the countries that have been in the UNSC temporay council

egen dumUNSC = max(UNSC == 1), by(Country)

// rename some countries

replace Country = "Bosnia and Her." if Country == "Bosnia and Herzegovina"
replace Country = "Dominican Rep." if Country == "Dominican Republic"
replace Country = "St. Vincent" if Country == "Saint Vincent and the Grenadines"
replace Country = "U.A.E." if Country == "United Arab Emirates"

// Run everything between preserve and restore

*****************************************************************
	preserve

keep if dumUNSC == 1

// use panelview and customize the time axis
	
panelview UNSC, i(Country) t(Period) type(treat) xlabel(1 "1993m1" 12 "1994m1" 24 "1995m1" 36 "1996m1" 48 "1997m1" 60 "1998m1" 72 "1999m1" 84 "2000m1" 96 "2001m1" 108 "2002m1" 120 "2003m1" 132 "2004m1" 144 "2005m1" 156 "2006m1" 168 "2007m1" 180 "2008m1" 192 "2009m1" 204 "2010m1" 216 "2011m1" 228 "2012m1" 240 "2013m1" 252 "2015m1" 264 "2015m1" 276 "2016m1" 288 "2017m1" 300 "2018m1" 312 "2019m1" 324 "2020m1" 336 "2021m1" 348 "2022m1") ytitle("") xtitle("") legend(label(1 "Control") label(2 "UNSC Member") position(6)) displayall leavegap type(missing) scale(0.7)
mycolor(PuBu)

	restore

*****************************************************************

drop dumUNSC

// Export the graph

graph rename Graph panelview

graph export panelview.png, as(png) replace width(4000)