I guess this is not a real cylinder but a cylinder with an elliptical base. If you only need this one, you can use this code and yscale=0.5.
\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot}
\tikzset{declare function={
vcrity(\ph,\th)=atan2(sin(\th)*sin(\ph),min(cos(\ph),-1/sqrt(2))*cos(\th));% critical t value y cylinder
vcritz(\ph,\th)=\ph;% critical t value y cylinder
},pics/ycylinder/.style={code={
\tikzset{3d/cylinder/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/3d/cylinder/##1}}
\pgfmathsetmacro{\vmin}{vcrity(\tdplotmainphi,\tdplotmaintheta)}
\pgfmathsetmacro{\vmax}{\vmin-180}
\path[3d/cylinder/mantle]
let \p1=($(0,1,0)-(0,0,0)$),\n1={atan2(\y1,\x1)} in
[shading angle=\n1]
plot[variable=\t,domain=\vmin:\vmax,smooth]
({\pv{r}*cos(\t)},0,{\pv{r}*sin(\t)})
--
plot[variable=\t,domain=\vmax:\vmin,smooth]
({\pv{r}*cos(\t)},\pv{h},{\pv{r}*sin(\t)})
--cycle;
\pgfmathtruncatemacro{\itest}{sign(cos(\tdplotmainphi))}
\ifnum\itest=-1
\path[3d/cylinder/top] let \p1=($(0,1,0)-(0,0,0)$),\n1={atan2(\y1,\x1)} in
[shading angle=\n1]
plot[variable=\t,domain=0:360,smooth cycle]
({\pv{r}*cos(\t)},\pv{h},{\pv{r}*sin(\t)}) ;
\fi
\ifnum\itest=1
\path[3d/cylinder/top] let \p1=($(0,1,0)-(0,0,0)$),\n1={atan2(\y1,\x1)} in
[shading angle=\n1]
plot[variable=\t,domain=0:360,smooth cycle]
({\pv{r}*cos(\t)},0,{\pv{r}*sin(\t)}) ;
\fi
}},3d/.cd,cylinder/.cd,r/.initial=1,h/.initial=1,
mantle/.style={draw,left color=blue,right
color=red,middle color=purple,fill opacity=0.5},top/.style={draw,left color=blue!30,right
color=red!30,middle color=purple!10,fill opacity=0.5}}
\begin{document}
\tdplotsetmaincoords{70}{120}
\begin{tikzpicture}[tdplot_main_coords,scale=2,yscale=0.5,transform shape]
\draw (-2,0,0) -- (2,0,0) (0,-2,0) -- (0,2,0) (0,0,-1) -- (0,0,1);
\path (0,-2,0) pic{ycylinder={r=1,h=4,top/.append style={draw}}};
\end{tikzpicture}
\end{document}
