Example of how you can do that with python. I tried it with a Rigol DHO802 but I think it should work with any scope supporting SCPI commands|:
import pyvisa
import matplotlib.pyplot as plt
import numpy as np
rm = pyvisa.ResourceManager()
my_instrument = rm.open_resource('TCPIP::192.168.1.8::INSTR')
print(my_instrument.query('*IDN?'))
my_instrument.write(":WAV:SOURCE CHAN1")
my_instrument.write(":WAV:MODE RAW")
my_instrument.write(":WAV:FORM WORD")
my_instrument.write(":STOP")
# get the data from the scope
data = {}
data["yincr"] = float(my_instrument.query(":WAVeform:YINCrement?"))
data["yorg"] = float(my_instrument.query(":WAVeform:YORIGIN?"))
data["yref"] = float(my_instrument.query(":WAVeform:YREFERENCE?"))
data["xincr"] = float(my_instrument.query(":WAVeform:XINCrement?"))
data["xorg"] = float(my_instrument.query(":WAVeform:XORIGIN?"))
data["mdepth"] = float(my_instrument.query(":ACQuire:MDEPth?"))
data["sr"] = float(my_instrument.query(":ACQuire:SRATe?"))
data["y"] = my_instrument.query_binary_values(":WAVeform:data?", datatype='H', is_big_endian=False, container=np.array)
data["y"] = (data["y"] - data["yref"] - data["yorg"]) * data["yincr"]
# Reconstruct the x-axis
N = len(data["y"])
data["x"] = np.linspace(0, N * data["xincr"], N)
data["x"] = data["x"] + data["xorg"]
fig, ax = plt.subplots(3, figsize=(10, 12))
#labels
ax[0].set_xlabel("time (s)")
ax[1].set_xlabel("logx from triggerpoint")
ax[2].set_xlabel("symlog")
ax[0].set_ylabel("V")
ax[1].set_ylabel("V")
ax[2].set_ylabel("V")
ax[0].plot(data["x"], data["y"], "-")
ax[0].grid(True)
ax[1].semilogx(data["x"], data["y"], "g-")
ax[1].grid(True)
ax[2].plot(data["x"], data["y"], "r-")
# threshold should be 10e-9 not 2e-9 for nicer plot
linthreshold = 10 ** int(np.log10(data["xincr"]))
ax[2].set_xscale('symlog', linthresh=linthreshold)
ax[2].grid(True)
plt.show()
my_instrument.write(":RUN")